Robert Blust
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Robert Blust: One model, true everywhere
| Author | ch.blust |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 501 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Robert Blust": {
"url": "https://mcp.blust.ch/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (14)
list_typesread-onlyEvery type the model's schemas declare. Use first, to learn which types exist before listing or describing one. No input. Returns `types`, each with `type`, `name`, `tagline`, `owner` (the type it nests under, or null) and `count`, the entities it holds.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
describe_schemaread-onlyOne type's schema: its sections as written and its declared relations as data. Use to learn what an entity of the type may hold; for the whole vocabulary use describe_relations. Input: `type`. Returns `url`, the schema's own file, `sections`, and `relations`: owner, owns, references both ways, enums, joins and lists.
Parameters:
type(required) — string — A type name from list_types, such as skill
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
describe_relationsread-onlyWhat the schemas declare between types: references with form and cardinality, ownership, enums, joins, list kinds. Use for a diagram or audit; for one type's full schema use describe_schema. Optional `type` narrows every list, `direction` (declares, declared-to, both; needs `type`) one side of relations, `via` relations and enums. Returns those lists, with `forms` and `reading` explaining every term. Not paged.
Parameters:
via— stringtype— stringdirection— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_rulesread-onlyThe vocabulary's conventions the model is held to, R0 onwards, from its core's CONVENTIONS.md. Use to resolve a number a schema or refusal cites, such as R9. A company's own rules are entities of type `rule`: list_entities and get_entity. No input. Returns `tagline`, the file's `url`, and `rules`, each with `rule`, `title` and `part`; describe_rule gives one rule's text.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
describe_ruleread-onlyOne convention of the vocabulary as written, not a company's own rule (an entity of type `rule`: list_entities, get_entity). Input: `rule`, a number from list_rules such as R9, in either case. Returns `rule`, `title`, `part`, `text` and the file's `url`. An unknown number is refused with the known ones listed.
Parameters:
rule(required) — string — A convention's number from list_rules, such as R9
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_checksread-onlyThe checks the model's own gate runs, from the checker release this server was built with. Use to see which rules a script enforces and which are left to a reader. No input. Returns `checks`, each with `name`, `rule`, `title` and what it `reports`, a `failure` or a `note` that fails nothing, and `ranBy`. This server runs none of them.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
describe_errorsread-onlyWhat a refused call looks like. A tool's output schema covers its answers only, so use this once, to branch on refusals or validate them. No input. Returns `errors`, every `code` with `when` it is raised and the JSON Schema of its `details`, and `schema`, the JSON Schema of a whole refusal: `error` with `code`, `message`, `rule`, `details`, beside `model`.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_entitiesread-onlyEntities with their frontmatter's short facts, in address order or newest first. Use to browse, or for what runs on a date, came last or has a value; to find by words use search. Input: optional `type`, `owner`, `order`, `on`, `by`, `where`, `fields`, `limit`, `cursor`. Returns `entities` with `fields`, and `page`; follow `page.nextCursor` while `page.hasMore`.
Parameters:
by— string — A date field, such as start or decided, to order by in the direction order nameson— string — A date, YYYY, YYYY-MM or YYYY-MM-DD: keep the entities whose period, start to end, holds it; an absent end is still runningtype— string — A type, to keep its entities; leave it out to list every typelimit— integer — Entries per page: 50 by default, clamped to 1–200, so 0 returns one entry and 1000 returns 200.order— string — address, where the pages sit, by default; newest or oldest, by when each entity came into the model, or by the date `by` namesowner— string — An owner's id or address, to keep its entitieswhere— object — Field values to keep, ignoring case, by field name; a reference matches by the name its page writescursor— string — `page.nextCursor` from the previous answer, sent with the same arguments; omit it for the first page.fields— array — Fields to add by name beside the short ones every entity carries, such as an array
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
get_entityread-onlyOne entity as structured data: fields, sections, tables, references both ways. Use to reason over one; for its page as written use fetch. Input: `id` or address, where its page sits, or `type` and `name`; an ambiguous name is refused with candidate ids. Returns `entity`, by id. Reference lists hold at most 50 edges; `referenceCounts` gives totals, list_references the rest.
Parameters:
id— string — The entity's id, as any answer gives it, or its address, where its page sitsname— string — The canonical name, the entity's H1; needs typetype— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
list_referencesread-onlyThe model's edges, filtered and paged. Use to inspect one entity's relations or one kind of reference without taking whole entities. Optional `entity` (an id or address), `direction` (out, in, both; needs `entity`), `via`, `type` (the far end's type, or either end's without `entity`), `limit`, `cursor`. Returns `edges`, each `from`, `via`, `to`, `attrs`, and `page`.
Parameters:
via— stringtype— stringlimit— integer — Entries per page: 50 by default, clamped to 1–200, so 0 returns one entry and 1000 returns 200.cursor— string — `page.nextCursor` from the previous answer, sent with the same arguments; omit it for the first page.entity— stringdirection— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
find_evidenceread-onlyEvery edge into one skill, grouped by the type of the page that drew it. Use to check a claimed skill against its evidence. Input: `skill`, an id, canonical name or address; optional `limit`, `cursor`. Returns `skill`, `evidence` and `page`; a profile's claim arrives via Skills.Skill with its level, an evidence row via Evidence.Skill. Attributes are verbatim.
Parameters:
skill(required) — string — The skill's id, canonical name or addresslimit— integer — Entries per page: 50 by default, clamped to 1–200, so 0 returns one entry and 1000 returns 200.cursor— string — `page.nextCursor` from the previous answer, sent with the same arguments; omit it for the first page.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
searchread-onlyFind entities by words, substring or exact name. `match: "words"` needs every query word's stem in name, tagline, fields, sections or cells; `"text"` (default) is a case-insensitive substring over the same; `"name"` the exact canonical name. Optional `type`, `owner`, `limit`, `cursor`. Returns `results` with `id`, `title`, `type`, `matched`, `words` in words mode, and `page`: name matches first, then a listing.
Parameters:
query(required) — stringtype— stringlimit— integer — Entries per page: 50 by default, clamped to 1–200, so 0 returns one entry and 1000 returns 200.match— stringowner— string — An owner's id or address, to keep its entitiescursor— string — `page.nextCursor` from the previous answer, sent with the same arguments; omit it for the first page.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
fetchread-onlyOne entity's page as written. Use to quote or display the source; for structured fields and references use get_entity. Input: `id` or address, from search, list_entities or any reference. Returns `id`, `title`, `type`, `url` and `text`, the Markdown source. Takes no name: search with match "name" finds the id.
Parameters:
id(required) — string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
diagramread-onlyA picture of the model as Mermaid; edge data: list_references. Input: `shape`; `id`, `domain`, `type` or `unit` narrow it. aggregate, flow, lifecycle take a context's `id`; organization without `id` draws the company; system a landscape, holds its data; usecase, scenario a use case's; requirements a feature's, product's, use case's or requirement's. Returns `mermaid`, `nodes`, `links`, `units`, counts. Max 50 nodes.
Parameters:
shape(required) — stringid— string — The process, the entity at a neighborhood's middle, the bounded context of a context map, or the aggregate or bounded context of an aggregate, flow or lifecycle picture, the group an organization is narrowed to, or the system drawn in its landscape by system and by the data it holds by holds, the use case drawn by usecase and scenario, or the feature, product, use case or requirement whose requirements are drawn, never by neighborhoodtype— string — A type, to draw its schema and the types it is declared withunit— string — core or a pack, to draw that unit's types and what they declare; a meta-model too large to draw whole is drawn as core, and `units` in the answer names every unitdomain— string — A domain's id or address, to draw its concepts
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.