Skip to main content
Glama
AutomateLab-tech

automatelab-ai-seo

Official

Extract named entities and sameAs links

extract_entities
Read-only

Extract named entities, linked concepts, and sameAs graph nodes from a page URL or raw text to build entity maps for schema generation and audit topic alignment.

Instructions

Extract named entities, linked concepts, and sameAs graph nodes from a page's content and structured data. Combines body-text NER with JSON-LD @type / sameAs walking.

Read-only when given url (one HTTP GET). Zero network when given text.

Primary path: MCP sampling - the host LLM does the NER and returns typed entities with sameAs URIs. Fallback path: deterministic regex-based extractor when sampling is unavailable. The result includes mode: "sampling" | "regex_fallback" so callers can tell which path ran.

When to use: building an entity map for schema generation, or auditing whether a page's entities match its target topic. To validate the JSON-LD itself, use audit_schema.

Either url or text must be provided.

Input Schema

NameRequiredDescriptionDefault
urlNoPublic URL to fetch and analyze. Either this OR `text` is required.
textNoRaw text/HTML to analyze directly. Either this OR `url` is required.
renderNoRendering mode for `url`. `static` (default) reads raw HTML. `headless` runs Playwright Chromium to capture JS-rendered content (adds 3-10s; requires `playwright-core` + `npx playwright install chromium`). Ignored when `text` is used.static
respect_robotsNoIf true (default), respect robots.txt when fetching `url`. Ignored when `text` is used.

Output Schema

NameRequiredDescriptionDefault
modeYes
entitiesYes
findingsYes
entity_countYes
citation_density_scoreYes
connected_entity_countYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • removedOutput schema / properties / citation_density_score / maximum
      Removed value: -100
    • removedOutput schema / properties / citation_density_score / minimum
      Removed value: -0
    • addedOutput schema / properties / connected_entity_count
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / entities / items / properties / confidence
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / entities / items / properties / is_defined
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / entities / items / properties / mention_count
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / properties / entities / items / properties / type / type
      Previous value: -"string"New value: +[
      +  "null",
      +  "string"
      +]
    • changedOutput schema / properties / entities / items / required
      Previous value: -[
      -  "name"
      -]New value: +[
      +  "name",
      +  "type",
      +  "same_as",
      +  "mention_count",
      +  "is_defined"
      +]
    • addedOutput schema / properties / findings
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "category": {
      +        "enum": [
      +          "schema",
      +          "robots",
      +          "technical",
      +          "freshness",
      +          "structure",
      +          "authority",
      +          "presence",
      +          "sitemap",
      +          "llms_txt",
      +          "citation",
      +          "evidence",
      +          "trust",
      +          "entity",
      +          "content"
      +        ],
      +        "type": "string"
      +      },
      +      "estimated_impact": {
      +        "anyOf": [
      +          {
      +            "not": {}
      +          },
      +          {
      +            "const": "high",
      +            "type": "string"
      +          },
      +          {
      +            "const": "medium",
      +            "type": "string"
      +          },
      +          {
      +            "const": "low",
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "failure_signal": {
      +        "anyOf": [
      +          {
      +            "not": {}
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "fix": {
      +        "type": "string"
      +      },
      +      "leading_indicator": {
      +        "anyOf": [
      +          {
      +            "not": {}
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "severity": {
      +        "enum": [
      +          "critical",
      +          "warning",
      +          "info"
      +        ],
      +        "type": "string"
      +      },
      +      "where": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "severity",
      +      "category",
      +      "where",
      +      "message",
      +      "fix"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / mode
      Added value: +{
      +  "enum": [
      +    "sampling",
      +    "regex_fallback"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / source
      Removed value: -{
      -  "enum": [
      -    "url",
      -    "text"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / url
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "source",
      -  "url",
      -  "entity_count",
      -  "entities",
      -  "citation_density_score"
      -]New value: +[
      +  "entities",
      +  "entity_count",
      +  "connected_entity_count",
      +  "citation_density_score",
      +  "findings",
      +  "mode"
      +]
  2. Changed2 schema fields changedv1.0.0
    • addedInput schema / properties / render
      Added value: +{
      +  "default": "static",
      +  "description": "Rendering mode for `url`. `static` (default) reads raw HTML. `headless` runs Playwright Chromium to capture JS-rendered content (adds 3-10s; requires `playwright-core` + `npx playwright install chromium`). Ignored when `text` is used.",
      +  "enum": [
      +    "static",
      +    "headless"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "citation_density_score": {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "entities": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "confidence": {
      +            "type": "number"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "same_as": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "type": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "entity_count": {
      +      "type": "number"
      +    },
      +    "source": {
      +      "enum": [
      +        "url",
      +        "text"
      +      ],
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "url",
      +    "entity_count",
      +    "entities",
      +    "citation_density_score"
      +  ],
      +  "type": "object"
      +}
  3. Changed3 schema fields changedv0.1.2
    • addedInput schema / properties / respect_robots / description
      Added value: +"If true (default), respect robots.txt when fetching `url`. Ignored when `text` is used."
    • addedInput schema / properties / text / description
      Added value: +"Raw text/HTML to analyze directly. Either this OR `url` is required."
    • addedInput schema / properties / url / description
      Added value: +"Public URL to fetch and analyze. Either this OR `text` is required."
  4. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Discloses traits beyond annotations: read-only vs zero-network depending on input mode, the sampling-primary/regex-fallback dual execution path, and the mode field in the result so callers know which path ran. Annotations cover safety hints but not the sampling/fallback behavior or network semantics per input.

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 action and mechanism, then structured into behavioral, when-to-use, and constraint paragraphs. Slightly dense with parenthetical asides but every sentence carries information; no filler.

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 an output schema present, it needn't explain return values, yet it still flags the mode field callers rely on. Network behavior, sampling vs fallback, alternatives, and the input constraint are all covered, making it complete for a 4-param read tool.

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 documents url, text, render, and respect_robots fully including defaults, enum values, and headless timing. The description reinforces the url-or-text rule but adds no parameter detail 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?

States a specific verb (extract) and resources (named entities, linked concepts, sameAs graph nodes) plus the two input sources. Explicitly distinguishes itself from sibling audit_schema by naming it and describing the different scope.

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?

Gives two concrete when-to-use cases (building entity maps for schema generation, auditing entity-topic match) and names the alternative tool for a related-but-different job (audit_schema). Also states the url-vs-text selection rule and the input requirement.

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