Robert Blustover MCP.
Whoever asks about my work — a person, a search engine, an agent — reaches the same answer, because every surface they can reach derives from one model I keep, and no claim in it stands without its evidence.
A company of one: technology leadership and business architecture, and the models that let people and agents both work inside a business.
This server reports what the model says at commit 8b29e0a2635c91818c4e1e9518845c7886e2293a (core 0.64.0) and adds nothing.
The endpoint
Three paths, and only one of them speaks the protocol. Add
https://mcp.blust.ch/mcp to a client that takes a remote MCP server by
URL.
POST/mcpThe protocol. Streamable HTTP, one snapshot, no session.GET/healthWhether the server is up, and the model commit it answers from.GET/This page. A browser gets it;GET /mcpis a 405 on purpose.
Or run one against the same model over stdio, with no server at all:
npx --package github:companygraph/mcp-server companygraph-mcp ./model ./meta/core
What it answers
list_typesEvery type the model's schemas declare. Use first, to learn which types exist before listing or describing one. No input. Returnstypes, each withtype,name,tagline,owner(the type it nests under, or null) andcount, the entities it holds.describe_schemaOne 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. Returnsurl, the schema's own file,sections, andrelations: owner, owns, references both ways, enums, joins and lists.describe_relationsWhat 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. Optionaltypenarrows every list,direction(declares, declared-to, both; needstype) one side of relations,viarelations and enums. Returns those lists, withformsandreadingexplaining every term. Not paged.list_rulesThe 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 typerule: list_entities and get_entity. No input. Returnstagline, the file'surl, andrules, each withrule,titleandpart; describe_rule gives one rule's text.describe_ruleOne convention of the vocabulary as written, not a company's own rule (an entity of typerule: list_entities, get_entity). Input:rule, a number from list_rules such as R9, in either case. Returnsrule,title,part,textand the file'surl. An unknown number is refused with the known ones listed.list_checksThe 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. Returnschecks, each withname,rule,titleand what itreports, afailureor anotethat fails nothing, andranBy. This server runs none of them.describe_errorsWhat 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. Returnserrors, everycodewithwhenit is raised and the JSON Schema of itsdetails, andschema, the JSON Schema of a whole refusal:errorwithcode,message,rule,details, besidemodel.list_entitiesEntities 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: optionaltype,owner,order,on,by,where,fields,limit,cursor. Returnsentitieswithfields, andpage; followpage.nextCursorwhilepage.hasMore.get_entityOne entity as structured data: fields, sections, tables, references both ways. Use to reason over one; for its page as written use fetch. Input:idor address, where its page sits, ortypeandname; an ambiguous name is refused with candidate ids. Returnsentity, by id. Reference lists hold at most 50 edges;referenceCountsgives totals, list_references the rest.list_referencesThe model's edges, filtered and paged. Use to inspect one entity's relations or one kind of reference without taking whole entities. Optionalentity(an id or address),direction(out, in, both; needsentity),via,type(the far end's type, or either end's withoutentity),limit,cursor. Returnsedges, eachfrom,via,to,attrs, andpage.find_evidenceEvery 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; optionallimit,cursor. Returnsskill,evidenceandpage; a profile's claim arrives via Skills.Skill with its level, an evidence row via Evidence.Skill. Attributes are verbatim.searchFind 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. Optionaltype,owner,limit,cursor. Returnsresultswithid,title,type,matched,wordsin words mode, andpage: name matches first, then a listing.fetchOne entity's page as written. Use to quote or display the source; for structured fields and references use get_entity. Input:idor address, from search, list_entities or any reference. Returnsid,title,type,urlandtext, the Markdown source. Takes no name: search with match "name" finds the id.diagramA picture of the model as Mermaid; for edge data use list_references. Input:shape;id,domainortypenarrow it; aggregate, flow and lifecycle take a context'sid; organization withoutiddraws the company; system is a system's landscape, holds its data, both byid. Returnsmermaid,nodes,links,title,edges,omitted, schema'severyType, lifecycle'stransitions. At most 50 nodes.
What it reads
A snapshot of robertblust/mental-model@8b29e0a, parsed at build time against the core that instance vendored, core 0.64.0 with parser v0.92.0, served by companygraph-mcp-server v0.66.1. Every answer carries that commit, so an answer can be checked against the files it came from.