Knowledge Graph company enrichment + web content extraction (diffbot.com)
Two tools with complete schemas and reasonable descriptions, but significant gaps in parameter documentation and error handling guidance. Tool names lack action verbs (diffbot_company, diffbot_extract are noun-based rather than verb_noun pattern). Descriptions are adequate (150-200 chars) but lack WHEN/WHY context. Critical security issue: _apiKey exposed as a tool parameter instead of server-side injection. Parameters lack type constraints (enums, ranges). Output schemas are not documented. Error handling is basic (throws strings, no recovery guidance).
Look up company details (employees, revenue, industry) for <name> — enrich a company from the Diffbot Knowledge Graph. Returns description, homepage, employee count, revenue, industries, founding date, HQ location, CEO, and Twitter. Example: diffbot_company({ name: "Stripe", _apiKey: "your-token" })
Extract the structured content (title, text, author) from <url> — Diffbot analyzes any web page and returns its type, title, cleaned body text, author, publish date, site name, and language. Example: diffbot_extract({ url: "https://example.com/article", _apiKey: "your-token" })
API credentials exposed as tool parameter (_apiKey). Credentials must use server-side secret injection via environment variables or vault. Agent traces log all parameters, secrets leak into logs and prompt history.
Tool names lack action verbs. 'diffbot_company' and 'diffbot_extract' are noun-based. Should be 'enrich_company' and 'extract_content' to match verb_noun convention (get_, create_, search_, etc.). LLMs infer intent from names before reading descriptions.
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing response structure. diffbot_company returns {query, match: {name, description, ...}} and diffbot_extract returns {url, content: {type, title, ...}} but this is inferred from code, not declared in tool definitions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. Errors are thrown as plain strings ('Diffbot diffbot_company: <error>') with no actionable next steps. Should categorize as retryable/user-fixable/fatal and suggest alternatives (e.g., 'No match found. Try with a company URL to disambiguate.').
Parameter descriptions lack constraints. 'name' and 'url' in diffbot_company have no format guidance. 'url' in diffbot_extract lacks validation hints. Should specify: 'Valid company name (2-100 chars, e.g. "Stripe")' and 'Valid HTTP(S) URL (e.g. https://example.com)'.