Skip to main content
Glama

Server Details

Spain's contributions to world science, exploration and culture, rigorously sourced

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
citarium/hispanic-legacy-mcp
GitHub Stars
0
Server Listing
Hispanic Legacy

TDQS

A4.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct operation: answering from the corpus, full-text search, comparing multiple objects, fetching single entities, browsing by tag, exploring relations, checking freshness, overview, and source registry. The descriptions draw clear boundaries, especially between answer and search, so an agent is unlikely to confuse them.

Naming Consistency4/5

Most retrieval tools follow a consistent get_* pattern (get_entity, get_related, get_sources, get_topic, get_latest, get_overview). The bare-verb tools answer, compare, and search are predictable query-style actions and not resource-named, so the naming convention is mostly consistent even if not perfectly uniform.

Tool Count5/5

Nine tools is well within the ideal range for a knowledge-graph corpus server. Each tool covers a distinct need — discovery, search, retrieval, comparison, relation traversal, provenance, and freshness — without redundancy or bloat.

Completeness5/5

The surface fully covers the read-side lifecycle of a curated knowledge corpus: discover topics and overview, search, answer, fetch entities, traverse relations, compare objects, inspect sources, and assess freshness. Since this appears to be a read-only knowledge base, the absence of mutation tools is not a gap.

Available Tools

9 tools
answerAnswer a question about Hispanic LegacyA
Read-onlyIdempotent
Inspect

Answer a question from the corpus, or refuse. Returns only the claims that bear on the question, each with the sources it cites and its editorial confidence. When the corpus cannot answer, answered is false and abstention_reason plus missing_topics say what was not covered — a refusal is a real result here, not an error. Use this when the user asked a question in words; use search when you want to see the candidates yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesThe question to answer, in the words the user asked it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimsNo
entityNo
marginNoRelative gap between the best candidate and the runner-up. A small margin means the corpus cannot tell them apart.
answeredYes
coverageNoShare of the question's information the winning object accounts for, weighted by term rarity.
candidatesYesNear misses, so a refusal is still a lead. Present whether or not the question was answered.
match_scoreNo
matched_fieldsNo
missing_topicsYesMeaningful words in the question that appear nowhere in the winning object — the gap, named.
match_thresholdYesThe coverage this corpus requires before it will answer at all.
match_confidenceNoHow well the answer fits the QUESTION — retrieval confidence, not editorial. Never confuse it with a claim's own confidence, which is how much the corpus stands behind the statement.
matched_questionNoThe stored question this was matched to, when the answer came from one.
abstention_reasonNoWhy the corpus declined: empty_query, no_candidates, below_coverage, ambiguous_candidates or no_intent_match.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds meaningful behavior beyond that: it details the return composition (claims with sources and editorial confidence) and explains the refusal semantics (answered=false, abstention_reason, missing_topics). This gives the agent a precise model of what happens in both success and abstention cases.

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

Conciseness5/5

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

The description is three sentences, each earning its place: the core action, the behavioral detail, and the routing guidance. It is front-loaded with the main purpose and avoids any filler or redundant restatement of the title.

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 one parameter, a complete output schema, and annotations covering safety and idempotency, the description needs to handle only the behavioral and selection nuances. It does so thoroughly by explaining refusal behavior and distinguishing itself from search. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents the single 'question' parameter. The description reinforces the intended usage ('in the words the user asked it') but adds no new semantic information beyond the schema. A baseline 3 is appropriate when the schema carries the parameter burden.

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?

The description states a specific verb and resource: 'Answer a question from the corpus, or refuse.' It clearly distinguishes the tool from the sibling search by saying 'Use this when the user asked a question in words; use search when you want to see the candidates yourself.' This leaves no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Use this when the user asked a question in words' and explicitly names the alternative: 'use search when you want to see the candidates yourself.' It also handles the refusal case, explaining that a refusal is a real result, not an error.

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

compareCompare Hispanic Legacy objects side by sideA
Read-onlyIdempotent
Inspect

Two to six knowledge objects side by side: their cards, every indexed attribute as a matrix (the same fields api/index.json publishes, null where an object does not say), the tags they share, the relations that run between them, the neighbours they have in common, and each one's claims with sources and confidence. Use this when the question is 'X vs Y', 'is X the same as Y' or 'how does X differ from Y' — search or get_topic first if you only have names, then pass the ids. An unknown id lands in missing with a near-miss suggestion and the rest are still compared.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesTwo to six knowledge object ids, as returned by search, get_topic or get_related, in the order you want the columns.

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue only when every id resolved.
claimsYesEvery compared object's claims, keyed by object id.
facetsYes
missingYesThe ids that resolved to nothing, in the order asked.
objectsYes
recoveryNo
shared_tagsYes
relations_betweenYes
shared_neighboursYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, non-destructive, and closed-world, and the description adds meaningful behavioral context: unknown ids land in a 'missing' field with a near-miss suggestion, comparison continues with the remaining objects, and missing attributes are represented as null. This goes well beyond the annotations.

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

Conciseness5/5

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

Three sentences deliver output scope, usage context, and edge-case behavior with no filler. The most important information—what the comparison includes and when to use it—is front-loaded, and the unknown-id behavior closes the description efficiently.

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 one required parameter, a rich output schema, and annotations covering safety, the description still adds everything needed for correct invocation: when to use it, how to prepare input ids via other tools, what the output contains, and how failures are reported. Nothing essential 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 coverage is 100%, so the schema already documents the ids parameter, including source, cardinality, and column ordering. The description adds extra parameter behavior by explaining how unknown ids are handled and that the rest are still compared, which enriches the semantics beyond the schema.

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?

The description states a specific verb (compare), a specific resource (knowledge objects), and a detailed scope: side-by-side cards, indexed attribute matrix, tags, relations, common neighbours, and claims. It also distinguishes itself from siblings by specifying when 'X vs Y' questions call for this tool rather than search or get_topic.

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

Usage Guidelines5/5

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

Explicit usage conditions are given: use when the question is 'X vs Y', 'is X the same as Y', or 'how does X differ from Y'. It also instructs to call search or get_topic first when only names are known and then pass the resulting ids, clearly routing the agent to the correct workflow.

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

get_entityGet one Hispanic Legacy knowledge objectA
Read-onlyIdempotent
Inspect

Fetch one knowledge object by id, with its claims and the sources each claim cites. Use this once search, answer or get_topic has given you an id. An unknown id is not a dead end: the answer names near-miss ids you can retry with.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe knowledge object's id, as returned by search, answer, get_topic or get_related — the last segment of its canonical URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
entityNo
recoveryNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior, and the description adds useful extra context: the structure of the returned data, the prerequisite that an id comes from a prior tool, and the error-recovery behavior where unknown ids produce near-miss retry candidates. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is three sentences, each earning its place: the core operation, the workflow trigger, and the error-recovery behavior. There is no filler or repetition, and the most important information is front-loaded.

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?

For a simple single-parameter read-only lookup with an output schema available, the description covers purpose, usage context, and failure behavior. The output schema handles return structure, so nothing essential is missing.

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

Parameters3/5

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

The input schema describes the single parameter 'id' in full detail, including where it comes from and its URL format, so schema coverage is 100%. The description only says 'by id,' adding no meaningful semantic information beyond the schema. Baseline 3 applies.

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?

The description states a specific verb and resource: 'Fetch one knowledge object by id,' and further specifies the return content ('with its claims and the sources each claim cites'). This is concrete enough to distinguish it from sibling tools like get_overview or get_sources, even without naming them.

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?

It gives an explicit trigger: 'Use this once search, answer or get_topic has given you an id,' which clearly establishes a workflow context. It also provides failure-recovery guidance for unknown ids. However, it does not explicitly mention when not to use this tool or name alternative siblings for different needs, so it stops short of full exclusionary guidance.

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

get_latestLatest verified Hispanic Legacy objectsA
Read-onlyIdempotent
Inspect

Most recently verified knowledge objects (freshness signal). Use this to judge how current the corpus is, or to see what changed since you last read it. It ranks by verification date and ignores your topic entirely — use search or get_topic when you want objects that are relevant rather than recent.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many recently verified objects to return, newest verification first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
resultsYes

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare the tool read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: it ranks by verification date, serves as a freshness signal, and ignores topic relevance, which is a critical behavioral trait for agent selection.

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

Conciseness5/5

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

Two sentences with no wasted words. The primary purpose and freshness signal are front-loaded, followed by practical usage guidance and a clear pointer to alternatives.

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?

For a simple tool with one optional parameter, full annotations, and an output schema, the description covers everything an agent needs to invoke it correctly. It explains purpose, ordering behavior, topic-agnostic behavior, and when to prefer sibling tools.

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

Parameters3/5

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

The input schema fully documents the single optional limit parameter with its default, range, and meaning. The description adds no parameter-specific detail, but schema coverage is 100%, so this meets the baseline.

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?

The description uses a specific verb and resource: it returns the most recently verified knowledge objects, ranked by verification date. It also explicitly distinguishes itself from topic-relevant tools by stating it ignores topic entirely.

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

Usage Guidelines5/5

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

The description clearly states when to use the tool: to judge corpus currency or see recent changes. It also gives explicit alternatives, telling the agent to use search or get_topic when relevance matters instead of recency.

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

get_overviewOverview of Hispanic LegacyA
Read-onlyIdempotent
Inspect

Corpus overview: what this instance knows, counts by type, published tags, freshness. Use this first when you land here and do not yet know whether this corpus can answer your question.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsYes
by_typeYes
instanceYes
descriptionYes
total_mediaYes
total_objectsYes
newest_verificationYes
oldest_verificationYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate those. It adds context about returned data (counts, tags, freshness) but does not disclose additional behavioral traits such as authentication or rate limits, which is acceptable given the annotations.

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

Conciseness5/5

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

The description is compact and front-loaded: it opens with the core purpose, then lists contents, then gives a clear usage directive. Every sentence contributes value with no redundancy.

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?

For a zero-parameter tool with full annotations and an output schema, the description is complete. It tells the agent what the tool returns, when to use it, and how it fits into the workflow. Nothing essential 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?

The tool has zero parameters and 100% schema description coverage, so there is no parameter burden on the description. The baseline of 4 applies because no parameter documentation is needed.

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?

The description states a clear verb-like resource ('Corpus overview') and specifies what it contains: 'what this instance knows, counts by type, published tags, freshness.' It clearly distinguishes itself from siblings by positioning itself as the initial orientation tool.

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?

Provides explicit guidance: 'Use this first when you land here and do not yet know whether this corpus can answer your question.' This gives clear context for when to use the tool, though it does not explicitly name alternatives or exclusions.

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

get_sourcesSources behind Hispanic LegacyA
Read-onlyIdempotent
Inspect

The instance's source registry — each entry with its evidence tier, reliability and access date. PAGED: 25 entries by default, 200 at most, and a response budget of about 64 KB per call — a page over budget comes back shorter WITH a next_cursor, never truncated. Read next_cursor and call again to continue; its absence means you have the last page. Filter by object_id, tier, host or accessed_since to avoid paging through a registry you do not need. Use this when you need the registry entry behind a citation, or a sample of the whole registry to judge the corpus before trusting it; get_entity already tells you which sources a claim cites.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoOnly sources whose URL is served by this host, compared without a leading www. A source with no URL never matches.
tierNoOnly sources of this evidence tier, spelled exactly as get_sources reports it.
limitNoHow many entries to return. Defaults to 25.
cursorNoContinue from a previous call: pass the next_cursor it returned. Opaque; do not construct one.
object_idNoRestrict the answer to the sources cited by this knowledge object. Omit it to page the whole registry.
accessed_sinceNoOnly sources accessed on or after this ISO date (YYYY-MM-DD).

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
totalYesHow many sources matched the filters, before paging.
sourcesYes
recoveryNo
returnedYes
next_cursorNoPass to the next call to continue. ABSENT means this was the last page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond the schema: pagination details (25 default, 200 max, ~64 KB budget, over-budget pages come back shorter WITH next_cursor, never truncated), how to detect the last page, and the semantics of a source with no URL never matching a host filter. This is rich behavioral disclosure.

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

Conciseness5/5

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

The description is compact and front-loaded: a one-sentence definition, then pagination semantics, then filtering guidance, then usage routing. Every sentence earns its place and none are redundant with the schema.

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?

For a read-only list tool with an output schema and 100% schema coverage, the description fully covers what an agent needs: what the resource is, when to use it versus siblings, how pagination works, and how to narrow results. The output schema covers return values, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter has a meaningful schema description (e.g., cursor is 'Opaque; do not construct one', host has 'A source with no URL never matches'). The description adds the pagination context (next_cursor meaning, page budget) but doesn't need to repeat parameter-level details. Baseline 3 is appropriate since the schema already carries the full weight.

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?

The description states a specific verb+resource ('The instance's source registry') and immediately distinguishes it from siblings by saying 'Use this when you need the registry entry behind a citation, or a sample of the whole registry... get_entity already tells you which sources a claim cites.' It clearly identifies the resource as a source registry and its role relative to get_entity.

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

Usage Guidelines5/5

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

Explicit when-to-use: 'Use this when you need the registry entry behind a citation, or a sample of the whole registry to judge the corpus before trusting it; get_entity already tells you which sources a claim cites.' It also gives filtering advice ('Filter by object_id, tier, host or accessed_since to avoid paging') which is practical usage guidance.

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

get_topicBrowse Hispanic Legacy by topicA
Read-onlyIdempotent
Inspect

List the knowledge objects carrying a tag (topics are content-backed tags). PAGED: 25 objects by default, 200 at most, and a response budget of about 64 KB per call — a page over budget comes back shorter WITH a next_cursor, never truncated. Read next_cursor and call again to continue, and its absence means you have the last page. Use this to browse a known topic; use search when you have a question rather than a tag, and get_overview to see which tags exist. An unknown tag comes back with the topics that do exist, so a miss still moves you forward.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesThe topic to list, spelled exactly as get_overview publishes it. Every published topic has objects under it, so an empty answer means the topic does not exist.
limitNoHow many objects to return. Defaults to 25.
cursorNoContinue from a previous call: pass the next_cursor it returned. Opaque; do not construct one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagYes
totalYesHow many objects carry this tag, before paging.
resultsYes
recoveryNo
returnedYes
next_cursorNoPass to the next call to continue. ABSENT means this was the last page.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds pagination behavior (25 default, 200 max, ~64 KB budget, short pages with next_cursor), cursor semantics ('absence means you have the last page'), and unknown-tag behavior ('comes back with the topics that do exist'). These are meaningful behavioral details beyond annotations, with no contradiction.

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

Conciseness5/5

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

The description packs purpose, pagination, cursor usage, and alternative-routing into a compact paragraph. Every sentence carries distinct information; no filler. The pagination note is conveniently front-loaded.

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?

For a paged read-only list tool with an output schema, the description covers all required operational knowledge: how to handle cursors, edge case of unknown tags, and when to choose alternatives. Nothing an agent needs to invoke correctly is missing.

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

Parameters3/5

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

The input schema already has 100% descriptive coverage of all three parameters (tag, limit, cursor). The description reinforces defaults and cursor semantics but doesn't add significant new meaning beyond the schema, so baseline 3 applies.

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 and resource: 'List the knowledge objects carrying a tag' and clarifies that topics are content-backed tags. Explicitly differentiates from search and get_overview later in the text, which helps an agent distinguish this tool from siblings.

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

Usage Guidelines5/5

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

Provides explicit routing: 'Use this to browse a known topic; use search when you have a question rather than a tag, and get_overview to see which tags exist.' Also gives guidance for unknown tags. This is explicit when-to-use and alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedget_related5 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Continue from a previous call: pass the next_cursor it returned. Opaque; do not construct one.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "How many relations to return, across both directions. Defaults to 25.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / next_cursor
        Added value: +{
        +  "description": "Pass to the next call to continue. ABSENT means this was the last page.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "description": "How many relations this object has in both directions, before paging.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
  2. 8 tool updates
    • Changedanswer14 fields changed
      • addedOutput schema / properties / abstention_reason
        Added value: +{
        +  "description": "Why the corpus declined: empty_query, no_candidates, below_coverage, ambiguous_candidates or no_intent_match.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / candidates
        Added value: +{
        +  "description": "Near misses, so a refusal is still a lead. Present whether or not the question was answered.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "coverage": {
        +        "type": "number"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "score": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "score",
        +      "coverage"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / claims / items / properties / relevance
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / properties / claims / items / required
        Previous value: -[
        -  "text",
        -  "confidence",
        -  "sources"
        -]New value: +[
        +  "text",
        +  "confidence",
        +  "sources",
        +  "relevance"
        +]
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "Share of the question's information the winning object accounts for, weighted by term rarity.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / entity / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / margin
        Added value: +{
        +  "description": "Relative gap between the best candidate and the runner-up. A small margin means the corpus cannot tell them apart.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / match_confidence
        Added value: +{
        +  "description": "How well the answer fits the QUESTION — retrieval confidence, not editorial. Never confuse it with a claim's own confidence, which is how much the corpus stands behind the statement.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / match_score
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / match_threshold
        Added value: +{
        +  "description": "The coverage this corpus requires before it will answer at all.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / matched_fields
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matched_question / description
        Added value: +"The stored question this was matched to, when the answer came from one."
      • addedOutput schema / properties / missing_topics
        Added value: +{
        +  "description": "Meaningful words in the question that appear nowhere in the winning object — the gap, named.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "answered"
        -]New value: +[
        +  "answered",
        +  "match_threshold",
        +  "missing_topics",
        +  "candidates"
        +]
    • Addedcompare
    • Changedget_entity1 field changed
      • addedOutput schema / properties / entity / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedget_latest1 field changed
      • addedOutput schema / properties / results / items / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedget_related2 fields changed
      • addedOutput schema / properties / incoming / items / properties / entity / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / outgoing / items / properties / entity / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedget_sources10 fields changed
      • addedInput schema / properties / accessed_since
        Added value: +{
        +  "description": "Only sources accessed on or after this ISO date (YYYY-MM-DD).",
        +  "maxLength": 10,
        +  "minLength": 4,
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Continue from a previous call: pass the next_cursor it returned. Opaque; do not construct one.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / host
        Added value: +{
        +  "description": "Only sources whose URL is served by this host, compared without a leading www. A source with no URL never matches.",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "How many entries to return. Defaults to 25.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / object_id / description
        Previous value: -"Restrict the answer to the sources cited by this knowledge object. Omit it to get the instance's whole source registry."New value: +"Restrict the answer to the sources cited by this knowledge object. Omit it to page the whole registry."
      • addedInput schema / properties / tier
        Added value: +{
        +  "description": "Only sources of this evidence tier, spelled exactly as get_sources reports it.",
        +  "maxLength": 60,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedOutput schema / properties / next_cursor
        Added value: +{
        +  "description": "Pass to the next call to continue. ABSENT means this was the last page.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "description": "How many sources matched the filters, before paging.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "found",
        -  "sources"
        -]New value: +[
        +  "found",
        +  "sources",
        +  "total",
        +  "returned"
        +]
    • Changedget_topic7 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Continue from a previous call: pass the next_cursor it returned. Opaque; do not construct one.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "How many objects to return. Defaults to 25.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / next_cursor
        Added value: +{
        +  "description": "Pass to the next call to continue. ABSENT means this was the last page.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / total / description
        Added value: +"How many objects carry this tag, before paging."
      • changedOutput schema / required
        Previous value: -[
        -  "tag",
        -  "results",
        -  "total"
        -]New value: +[
        +  "tag",
        +  "results",
        +  "total",
        +  "returned"
        +]
    • Changedsearch5 fields changed
      • addedOutput schema / properties / results / items / properties / coverage
        Added value: +{
        +  "description": "Share of the question's information this object accounts for, weighted by term rarity. 1 means every meaningful word in the query is present; a low value with a high score means the object matched common words only.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / results / items / properties / matched_fields / description
        Previous value: -"Which fields the query hit: name, tags, content. Does NOT determine the score on its own."New value: +"Which fields the query hit: name, tags, questions, summary, claims. Does NOT determine the score on its own."
      • changedOutput schema / properties / results / items / properties / score / description
        Previous value: -"Text match, weighted by where the token hits (name 3, tags 2, content 1 per query token), plus a centrality bonus of up to 0.9 for objects that other objects point at. That bonus is why two hits can share matched_fields and still score differently: the decimal is inbound edges, not text relevance."New value: +"BM25 relevance: each query term is weighted by how RARE it is in this corpus and by where it hits (name 3, tags 2, questions 2, body 1). A hit must also cover a minimum share of the question's information, measured in the same rarity weights — matching only common words does not qualify. Centrality (how many objects point at this one) breaks TIES ONLY and is never part of the score, so it cannot make an irrelevant object rank. Two hits with the same matched_fields can still differ: the score is rarity-weighted, so matching a rare term is worth more than matching a common one."
      • addedOutput schema / properties / results / items / properties / x
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "description": "Indexed instance-specific attributes, grouped by namespace — the same fields api/index.json publishes. Absent when the instance declares none.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "name",
        -  "summary",
        -  "tags",
        -  "evidence_tier",
        -  "confidence",
        -  "last_verified",
        -  "canonical_url",
        -  "api_url",
        -  "score",
        -  "matched_fields"
        -]New value: +[
        +  "id",
        +  "type",
        +  "name",
        +  "summary",
        +  "tags",
        +  "evidence_tier",
        +  "confidence",
        +  "last_verified",
        +  "canonical_url",
        +  "api_url",
        +  "score",
        +  "matched_fields",
        +  "coverage"
        +]
  3. 8 tool updates
    • Changedanswer1 field changed
      • addedInput schema / properties / question / description
        Added value: +"The question to answer, in the words the user asked it."
    • Changedget_entity3 fields changed
      • addedInput schema / properties / id / description
        Added value: +"The knowledge object's id, as returned by search, answer, get_topic or get_related — the last segment of its canonical URL."
      • addedOutput schema / properties / entity / properties / media
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "alt": {
        +        "type": "string"
        +      },
        +      "caption": {
        +        "type": "string"
        +      },
        +      "credit": {
        +        "type": "string"
        +      },
        +      "height": {
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "license_spdx": {
        +        "type": "string"
        +      },
        +      "permissions": {
        +        "additionalProperties": {
        +          "type": "boolean"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "supports": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      },
        +      "width": {
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "url",
        +      "alt",
        +      "credit",
        +      "license_spdx",
        +      "permissions"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / entity / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "name",
        -  "summary",
        -  "tags",
        -  "evidence_tier",
        -  "confidence",
        -  "last_verified",
        -  "canonical_url",
        -  "api_url",
        -  "questions",
        -  "claims"
        -]New value: +[
        +  "id",
        +  "type",
        +  "name",
        +  "summary",
        +  "tags",
        +  "evidence_tier",
        +  "confidence",
        +  "last_verified",
        +  "canonical_url",
        +  "api_url",
        +  "questions",
        +  "claims",
        +  "media"
        +]
    • Changedget_latest1 field changed
      • addedInput schema / properties / limit / description
        Added value: +"How many recently verified objects to return, newest verification first."
    • Changedget_overview2 fields changed
      • addedOutput schema / properties / total_media
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "instance",
        -  "description",
        -  "total_objects",
        -  "by_type",
        -  "tags",
        -  "newest_verification",
        -  "oldest_verification"
        -]New value: +[
        +  "instance",
        +  "description",
        +  "total_objects",
        +  "by_type",
        +  "tags",
        +  "newest_verification",
        +  "oldest_verification",
        +  "total_media"
        +]
    • Changedget_related1 field changed
      • addedInput schema / properties / id / description
        Added value: +"The knowledge object to walk out from, by id."
    • Changedget_sources1 field changed
      • addedInput schema / properties / object_id / description
        Added value: +"Restrict the answer to the sources cited by this knowledge object. Omit it to get the instance's whole source registry."
    • Changedget_topic1 field changed
      • addedInput schema / properties / tag / description
        Added value: +"The topic to list, spelled exactly as get_overview publishes it. Every published topic has objects under it, so an empty answer means the topic does not exist."
    • Changedsearch4 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"How many ranked hits to return, best first."
      • addedInput schema / properties / query / description
        Added value: +"What to look for, in the user's own words. Matched against titles, questions, claim text and tags; accents and apostrophes are ignored, so 'jose' finds 'José'."
      • addedOutput schema / properties / results / items / properties / matched_fields / description
        Added value: +"Which fields the query hit: name, tags, content. Does NOT determine the score on its own."
      • addedOutput schema / properties / results / items / properties / score / description
        Added value: +"Text match, weighted by where the token hits (name 3, tags 2, content 1 per query token), plus a centrality bonus of up to 0.9 for objects that other objects point at. That bonus is why two hits can share matched_fields and still score differently: the decimal is inbound edges, not text relevance."
  4. 4 tool updates
    • Changedget_entity1 field changed
      • addedOutput schema / properties / recovery
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "available_count": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "available_truncated": {
        +      "type": "boolean"
        +    },
        +    "did_you_mean": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hint": {
        +      "type": "string"
        +    },
        +    "next_tool": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "available_count",
        +    "available",
        +    "next_tool",
        +    "hint"
        +  ],
        +  "type": "object"
        +}
    • Changedget_related1 field changed
      • addedOutput schema / properties / recovery
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "available_count": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "available_truncated": {
        +      "type": "boolean"
        +    },
        +    "did_you_mean": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hint": {
        +      "type": "string"
        +    },
        +    "next_tool": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "available_count",
        +    "available",
        +    "next_tool",
        +    "hint"
        +  ],
        +  "type": "object"
        +}
    • Changedget_sources1 field changed
      • addedOutput schema / properties / recovery
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "available_count": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "available_truncated": {
        +      "type": "boolean"
        +    },
        +    "did_you_mean": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hint": {
        +      "type": "string"
        +    },
        +    "next_tool": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "available_count",
        +    "available",
        +    "next_tool",
        +    "hint"
        +  ],
        +  "type": "object"
        +}
    • Changedget_topic1 field changed
      • addedOutput schema / properties / recovery
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "available_count": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "available_truncated": {
        +      "type": "boolean"
        +    },
        +    "did_you_mean": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hint": {
        +      "type": "string"
        +    },
        +    "next_tool": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "available_count",
        +    "available",
        +    "next_tool",
        +    "hint"
        +  ],
        +  "type": "object"
        +}
  5. 8 tool updates
    • First observedanswer
    • First observedget_entity
    • First observedget_latest
    • First observedget_overview
    • First observedget_related
    • First observedget_sources
    • First observedget_topic
    • First observedsearch

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides access to official Spanish fiscal data and tools based on AEAT and BOE sources, covering income tax, VAT, and regional deductions. It enables AI assistants to answer tax-related queries and verify filing deadlines using verified information.
    10
    22
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides normalized search over public-sector tender notices from TED, covering Spain and the rest of the EU. Supports filtering by country, keyword, CPV prefix, and publication recency, returning tender details and related links.
    -
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for querying Spanish government open data APIs including grants, legislation, company registry, statistics, and open data catalog. Enables LLMs to access Spanish public information on-the-fly.
    26
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.