GuestGraphover MCP.
We are working toward hotels that know a returning guest as one person, whichever of their systems the guest passed through, from a profile they can ask why it believes what it does, and correct when it is wrong.
The open-source guest identity graph for hospitality: one explainable, reversible guest profile, derived from the records every system in a hotel keeps of the same person.
This server reports what the model says at commit 49662a2a94c2643ea4f4f15633253bdebd4483ce (core 0.40.0) and adds nothing.
The endpoint
Three paths, and only one of them speaks the protocol. Add
https://mcp.guestgraph.io/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 rules the model is held to, from the CONVENTIONS.md its core vendors. Use to resolve a rule number that a schema or a refusal cites, such as R9. No input. Returnstagline, the file'surl, andrules, each withrule,titleandpart; describe_rule gives one rule's text.describe_ruleOne rule as written. 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,ruleand that rule'stitle, andranBy. A list and no verdict: 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_entitiesThe entities of one type, by id. Use to browse a type; to find an entity by words or by name use search. Input:type, optionalowner(an id) to keep one owner's entities,limit(default 50, at most 200) andcursor. Returnsentitieswithid,type,name,tagline,owner, andpage; followpage.nextCursorwhilepage.hasMore.get_entityOne entity as structured data: fields, sections, tables and its references both ways. Use to reason over an entity; for its page as written use fetch. Input:id, ortypeandname; an ambiguous name is refused with candidate ids. Returnsentity. Each reference list holds at most 50 edges;referenceCountsgives the totals and 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),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 or canonical name; 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: a listing, not a ranking.fetchOne entity's page as written. Use to quote or display the source; for structured fields and references use get_entity. Input:id, from search, list_entities or any reference. Returnsid,title,type,urlandtext, the Markdown source. Takes no name: search with match "name" finds the id.
What it reads
A snapshot of guestgraph/mental-model@49662a2, parsed at build time against the core that instance vendored, core 0.40.0 with parser v0.45.0, served by companygraph-mcp-server v0.29.0. Every answer carries that commit, so an answer can be checked against the files it came from.