Skip to main content
Glama

Export the entity graph

get_entity_graph
Read-only

Get the whole entity graph, or a filtered part of it, in a chosen format: json for the canonical document, jsonld for a validator, mermaid or markdown to read in a conversation, dot or graphml for a graph tool. Defaults to json. Takes the same filters as list_entities. mermaid caps declared entities at 150 and markdown caps rows at 50, and both say so in truncation; json, jsonld, dot and graphml apply no node cap. No cap is not the same as complete: every format renders the stored map, and on the local server that map carries no per-edge page list and no per-page reference list, so those arrays are empty because they were never stored rather than because nothing matched. mermaid's cap bounds declared entities only, so one entity referencing thousands of undeclared ids still renders thousands of placeholder nodes. Not every server implements every format: one that does not will say so rather than return an empty or partial graph, so read the error rather than treating a refusal as a site with nothing to draw. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

Input Schema

NameRequiredDescriptionDefault
qNoOnly entities whose name or @id contains this text. Case-insensitive substring, not a pattern.
pageNoOnly entities declared on a page matching one of these values. A value that is an absolute http(s) URL or starts with "/" is a PREFIX match: the full URL for the first, the page path and query for the second, so "/blog" matches https://example.com/blog/post but not https://example.com/tag/blog. Any other value is a SUBSTRING match against the URL, so "blog" matches both. Case-sensitive. Not a glob. Several values are an OR.
typeNoOnly entities carrying one of these @type values. Case-insensitive. Several values are an OR: an entity matching any one of them is kept.
formatNoHow to render the graph: json, jsonld, mermaid, dot, graphml, markdown. Defaults to json.
run_idNoA specific audit run to read. Defaults to the latest audit that stored at least one entity, which is NOT always the latest audit: an audit that stored none is passed over, because the store cannot tell a site that declares nothing from an audit that predates the entity map. When one is passed over, warnings names it. If you are checking whether a change landed, name the run.
problemNoOnly entities with one of these problems: no-id, conflict, dangling, single-page, split-identity. Several values are an OR.
website_idNoThe registered website to read, on the hosted server. Ignored by the local server, which reads the project store. When both this and run_id are given, run_id wins and this is ignored; naming a run of a different website is answered about the run.
include_page_localNoInclude entities that describe one page rather than the site's subject matter, such as a page's own WebPage or BreadcrumbList. False by default because they usually outnumber everything else.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +{}
  2. Changed1 schema field changed
    • changedInput schema / properties / page / description
      Previous value: -"Only entities declared on a page whose URL CONTAINS one of these strings. Not a prefix test and not a glob, so \"/blog\" matches https://example.com/blog/post and https://example.com/tag/blog alike. Several values are an OR."New value: +"Only entities declared on a page matching one of these values. A value that is an absolute http(s) URL or starts with \"/\" is a PREFIX match: the full URL for the first, the page path and query for the second, so \"/blog\" matches https://example.com/blog/post but not https://example.com/tag/blog. Any other value is a SUBSTRING match against the URL, so \"blog\" matches both. Case-sensitive. Not a glob. Several values are an OR."
  3. Changed5 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / page / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 2048,
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "$ref": "#/properties/page/anyOf/0"
      -    },
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2048,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "maxLength": 2048,
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / problem / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "no-id",
      -      "conflict",
      -      "dangling",
      -      "single-page",
      -      "split-identity"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "$ref": "#/properties/problem/anyOf/0"
      -    },
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "no-id",
      +      "conflict",
      +      "dangling",
      +      "single-page",
      +      "split-identity"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "no-id",
      +        "conflict",
      +        "dangling",
      +        "single-page",
      +        "split-identity"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / type / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 2048,
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "$ref": "#/properties/type/anyOf/0"
      -    },
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2048,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "maxLength": 2048,
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
  4. Added

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the readOnly/openWorld annotations: it discloses per-format node caps (mermaid 150, markdown 50) and that truncation is announced, that empty arrays mean 'never stored' rather than 'nothing matched', that a server may refuse an unsupported format rather than return partial data, and that mermaid's cap bounds declared entities only. These are exactly the quirks an agent needs to interpret output correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and format tradeoffs are front-loaded and each sentence carries substantive information with little filler. It is long, and the closing fix-and-verify loop drifts into a multi-tool workflow (list_entities, run_audit, compare_entities, gainedId) that is only loosely tied to this tool's own call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so well for edge cases: truncation messaging, empty-array causes, refusal behavior, and coverage-field semantics. It stops short of describing the actual shape of the canonical json/jsonld document, which is the one remaining gap for an 8-parameter export tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter descriptions are already rich, so the baseline is 3. The description adds meaning beyond the schema for the format parameter by attaching behavior to each value (which formats cap and which do not) and clarifies run_id selection in workflow terms, which is a genuine increment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Get the whole entity graph, or a filtered part of it, in a chosen format', then enumerates the concrete output formats. It ties itself to siblings by noting it 'Takes the same filters as list_entities', letting an agent distinguish the bulk-export tool from the list tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for choosing a format ('mermaid or markdown to read in a conversation, dot or graphml for a graph tool') and for naming run_id ('If you are checking whether a change landed, name the run'). It does not explicitly state when to prefer this tool over list_entities or get_entity, so the when-not guidance is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.