Skip to main content
Glama

Search or browse originators

originators
Read-onlyIdempotent

Lookup, search, or browse originators. Handles people, proverbs, anonymous sources, and institutions. Use name= for exact match, search= for fuzzy, neither for browsing.

When to use: User asks about a person/author, wants to find who said something, or needs to browse by category (poets, philosophers, etc).

Behaviors:

  • name provided → resolve and return single originator details

  • search provided → fuzzy search, return ranked list (optionally filtered by category tags)

  • Neither → browse by filters (popular, language, min_quotes, category tags, etc.)

Category tags filter by originator type (e.g., ["Poets", "Politicians", "Catholic Bishops"]) - works with all modes.

Gender filter accepts natural language (e.g., "female", "women", "queer", "trans") - resolved to Wikidata Q-IDs internally.

Response format:

  • Concise (default): slug, full_name, sort_name, quote_count, descriptions_i18n, web_url

  • Detailed: + biography (500 char excerpt), confidence_tier, similarity_score

Response includes ai_hints with suggested next actions and quality signals for agent workflows.

Date filters (born_on, died_on, born_year_gte, born_year_lte, died_year_gte, died_year_lte) combine with every other filter via AND. Negative year bounds represent BCE; year 0 is rejected.

Examples:

  • originators(name="Einstein") - exact lookup

  • originators(search="Shake") - fuzzy search for "Shakespeare"

  • originators(tags=["Poets"], gender="female") - browse female poets

  • originators(sort="popular", limit=10) - top 10 by quote count

  • originators(born_on="04-20") - originators born April 20 (any year)

  • originators(born_year_gte=-500, born_year_lte=-300) - originators born between 500 BCE and 300 BCE inclusive

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "originators"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoExact lookup for originator name (resolved internally) → single result
sortNoSort order for results when browsing (not using name/search)popular
tagsNoFilter by originator category tags (e.g., ['Poets', 'Politicians', 'Catholic Bishops'])
limitNoMax results
genderNoFilter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).
livingNoFilter quotes by originator living status (living/alive vs deceased/historical).
searchNoFuzzy search query for originators (minimum 2 characters) → multiple results
born_onNoFilter by birth month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\d{2}-\d{2}$. Uses exact birth_date only; EDTF is not consulted for month-day filters. Example: '04-20' for April 20.
died_onNoFilter by death month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\d{2}-\d{2}$. Uses exact death_date only. Example: '12-25'.
languageNoFilter by quote language (ISO 639-1 code, e.g., 'en', 'fr', 'de')
min_quotesNoMinimum quote count threshold
born_year_gteNoLower-bound filter on birth-date year (inclusive). Non-zero signed integer. Negative values represent BCE years (e.g., -500 means 500 BCE). Year 0 is rejected — use -1 for 1 BCE or 1 for 1 CE. Falls back to birth_date_edtf when exact birth_date is null AND the EDTF value encodes a single specific year (BCE and approximate-year markers like '1850~' accepted; intervals like '1850/1852' and century-only values like '18XX' excluded).
born_year_lteNoUpper-bound filter on birth-date year (inclusive). Same semantics as born_year_gte. If only one bound is supplied, the other side is unbounded. When both are supplied, born_year_lte must be >= born_year_gte.
died_year_gteNoLower-bound filter on death-date year (inclusive). Same semantics as born_year_gte, applied to death_date / death_date_edtf.
died_year_lteNoUpper-bound filter on death-date year (inclusive). Same semantics as born_year_lte, applied to death_date / death_date_edtf.
response_formatNoResponse detail level - concise (slug, name, quote_count, descriptions_i18n, web_url) or detailed (+ biography excerpt, confidence_tier, similarity_score)concise

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / gender / description
      Previous value: -"Filter by gender (e.g., 'female', 'male', 'non-binary', 'trans', 'queer', 'lgbtq')"New value: +"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans)."
    • addedInput schema / properties / gender / examples
      Added value: +[
      +  "female",
      +  "trans woman",
      +  "queer"
      +]
    • changedInput schema / properties / living / description
      Previous value: -"Filter by living status (e.g., 'living', 'deceased')"New value: +"Filter quotes by originator living status (living/alive vs deceased/historical)."
    • addedInput schema / properties / living / enum
      Added value: +[
      +  "living",
      +  "deceased"
      +]
    • addedInput schema / properties / living / examples
      Added value: +[
      +  "living",
      +  "deceased"
      +]
  2. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  3. Changed6 schema fields changed
    • addedInput schema / properties / born_on
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Filter by birth month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\\d{2}-\\d{2}$. Uses exact birth_date only; EDTF is not consulted for month-day filters. Example: '04-20' for April 20."
      +}
    • addedInput schema / properties / born_year_gte
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Lower-bound filter on birth-date year (inclusive). Non-zero signed integer. Negative values represent BCE years (e.g., -500 means 500 BCE). Year 0 is rejected — use -1 for 1 BCE or 1 for 1 CE. Falls back to birth_date_edtf when exact birth_date is null AND the EDTF value encodes a single specific year (BCE and approximate-year markers like '1850~' accepted; intervals like '1850/1852' and century-only values like '18XX' excluded)."
      +}
    • addedInput schema / properties / born_year_lte
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Upper-bound filter on birth-date year (inclusive). Same semantics as born_year_gte. If only one bound is supplied, the other side is unbounded. When both are supplied, born_year_lte must be >= born_year_gte."
      +}
    • addedInput schema / properties / died_on
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Filter by death month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\\d{2}-\\d{2}$. Uses exact death_date only. Example: '12-25'."
      +}
    • addedInput schema / properties / died_year_gte
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Lower-bound filter on death-date year (inclusive). Same semantics as born_year_gte, applied to death_date / death_date_edtf."
      +}
    • addedInput schema / properties / died_year_lte
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Upper-bound filter on death-date year (inclusive). Same semantics as born_year_lte, applied to death_date / death_date_edtf."
      +}
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses detailed behaviors: exact match vs fuzzy search vs browsing, category tags work across all modes, gender natural language resolution to Wikidata Q-IDs, response format differences, and intricate date filter semantics (BCE negative years, year 0 rejection, EDTF fallback rules). This is far more than the annotations alone provide.

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 long but extremely well-structured with clear sections: purpose sentence, 'When to use', bulleted behaviors, response format, date filter semantics, and examples. Every section earns its place, and the most important information (what the tool does and its three modes) is front-loaded in the first sentence.

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?

Given 16 parameters, no output schema, and the tool's complexity, the description is highly complete. It explains response formats (concise vs detailed), includes output fields, mentions ai_hints, and covers all parameter categories. The examples illustrate typical use cases, leaving little ambiguity about how to use the tool correctly.

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

Parameters5/5

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

Although schema description coverage is 100%, the tool description adds cross-parameter meaning not present in the schema: it explains the name/search/browse modes, states that date filters combine with every other filter via AND, and clarifies that category tags work in all modes. The examples tie parameter combinations to concrete use cases, adding substantial value over the schema alone.

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 opens with 'Lookup, search, or browse originators', which is a specific verb+resource statement. It further distinguishes the tool's scope by listing 'people, proverbs, anonymous sources, and institutions' and by explaining the three modes (name, search, browse), clearly separating it from sibling tools like quotes_by or who_said that handle quote-level queries.

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?

The description includes an explicit 'When to use' section: 'User asks about a person/author, wants to find who said something, or needs to browse by category'. This provides clear context for when to invoke this tool. It does not explicitly name alternative tools to use instead (e.g., who_said), but the three-mode breakdown makes the usage boundaries reasonably clear.

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.