Skip to main content
Glama

List declared entities

list_entities
Read-only

List the entities a site declares in its JSON-LD, collapsed across every crawled page into one graph, so an Organization declared identically on 60 pages is one row rather than 60. Declarations collapse by resolved @id, or by type and name when there is no @id, so the SAME real-world thing can still occupy several rows when its declared identity differs between pages: a relative @id such as "#organization" resolves against each page and yields one row per page. That is the split-identity problem, not a quirk of this tool. Filter by @type, by declaring page, by problem class, or by a text match on the name. Page-local entities (a page's own WebPage, BreadcrumbList and unnamed images) usually outnumber the site's actual subject matter and are hidden unless include_page_local is true. Returns the site-wide summary (it does not change with the filters), a filtered block with the node and edge counts that survived them, a page of nodes, total, and hasMore; keep requesting pages while hasMore is true rather than describing a site from one page. 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.
limitNoEntities to return. Default 25, maximum 100.
offsetNoEntities to skip, for paging through a result larger than limit. Default 0. Ordering is by page count descending, then by key, and is stable across calls on one audit, so paging does not repeat or skip a row.
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. Changed6 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
    • addedInput schema / properties / offset / maximum
      Added value: +9007199254740991
    • 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.6/5.0
Behavior5/5

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

Annotations already declare a safe read, and the description adds substantial behaviour beyond them: default hiding of page-local entities, the run_id default that skips entity-less audits, stable paging order, the split-identity failure mode, the gainedId-only confirmation of a fix, and the proven/partial meaning of coverage. This is exactly the kind of context structured fields cannot carry.

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?

Front-loaded with the core purpose and folding rule, and every later sentence carries operational information. It is dense and runs long, with some rhetorical padding ('not a quirk of this tool') and a long fix-and-verify block, but little is genuinely wasted.

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

Completeness5/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 shape itself, enumerating the unfiltered site-wide summary, the filtered node/edge counts, the page of nodes, total and hasMore. For a 9-parameter, zero-required list tool with rich paging and audit-run semantics, nothing an agent needs to call it correctly is missing.

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 description coverage is 100%, so the baseline is 3, but the description still adds value: it summarises the filter axes (@type, declaring page, problem class, name text match), justifies the include_page_local default, and explains that hasMore governs continued paging. It stops short of restating the prefix-vs-substring matching rules, which the schema already handles.

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?

States a specific verb, resource and scope: 'List the entities a site declares in its JSON-LD, collapsed across every crawled page into one graph.' The collapsing rule (by resolved @id, else by type+name) and the split-identity caveat make the tool's identity unmistakable and distinct from get_entity, get_entity_graph and compare_entities, which it also names in the workflow.

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?

Clear context is given: use problem filters for the fix-and-verify loop, keep paging while hasMore, hide page-local entities unless include_page_local, and name run_id when verifying a change. It routes to compare_entities and run_audit as follow-up steps, but never states an explicit exclusion or contrast against get_entity/get_entity_findings, so it stops short of full when-not coverage.

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.