referencesource.org
Server Details
Verified reference data; each record carries its source URL and quote. verify_quote checks claims.
- Status
- Healthy
- Uptime
- 97.2% over 37 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- joelp22-maker/referencesource-mcp
- GitHub Stars
- 0
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: listing datasets, searching records, fetching by ID, and verifying a specific claim. There is no meaningful overlap between them despite search and verify both involving records.
All tool names follow a consistent verb_noun pattern: get_record, list_datasets, search_records, verify_quote. The naming is uniform, predictable, and clearly indicates each action.
Four tools is a well-scoped set for a reference-data lookup service. Each tool covers a necessary step in the workflow without redundancy or bloat.
The toolset covers the full read-only lifecycle: dataset discovery, record search, record retrieval, and fact verification. Minor limitations like lack of pagination for search results and no direct dataset-detail endpoint are workable gaps but not severe enough to break the core workflow.
Available Tools
4 toolsget_recordGet one record by idARead-onlyInspect
Fetch one record by id — for example, look up a FIPS 140 certificate's status, a state's boiler inspection rules, or a county's loan limit. Returns the full record with its source URL and verbatim source quote. Record ids appear in search_records results and in each record's url.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes | The record's id field, e.g. "ak". | |
| dataset_slug | Yes | Dataset slug from list_datasets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safe-read nature is clear. The description adds value by stating it returns the full record with source URL and verbatim quote, which annotations don't cover. For a simple read tool, this is sufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no wasted words. It front-loads the core action and examples, then explains the return value and ID source in a logical order. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read tool with good annotations and no output schema, the description covers the return format and ID provenance. It is slightly lacking in explicitly noting that dataset_slug comes from list_datasets, but this is implied by the sibling tool. Overall, it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters (record_id and dataset_slug) adequately. The description mentions 'record ids appear in search_records results' but does not add new syntax or format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it fetches a single record by ID, provides concrete examples (FIPS 140 certificate, boiler rules, loan limits), and specifies that the returned record includes a source URL and verbatim quote. This distinguishes it from siblings like search_records (search) and list_datasets (listing datasets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the record ID comes from search_records results or the record's URL, guiding the agent on where to find the ID. However, it does not mention when to prefer this over verify_quote or explicitly exclude alternative tools, leaving a minor gap in usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsList reference datasetsARead-onlyInspect
What reference datasets are available? Lists every published dataset with its title, record count, last-verified date and a one-sentence summary. Covers regulatory thresholds, version compatibility, certification registers, licensing rules and more. Pass query to list only the datasets matching a topic — that is much cheaper than reading the whole list. Use the returned slug with search_records or get_record.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return each dataset's complete scope statement instead of the first sentence. Off by default: the full text is roughly four times the size and is rarely needed to choose a dataset. | |
| query | No | Optional topic filter, e.g. "boiler", "tariff" or "loan limit". Case-insensitive substring, matched against each dataset's slug, title and full description. Omit it to list every dataset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and destructiveHint annotations already establish that this is a safe read operation. The description adds useful behavioral context: the output fields, the breadth of coverage, a performance note that query filtering is 'much cheaper' than the full list, and the fact that slugs are intended for downstream calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry exactly the needed information: a question-shaped opener that frames purpose, a compact list of output fields and coverage, and a closing routing note. No redundant phrases or restatements of the title; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalog-listing tool with zero required parameters, the description is complete: it names the output fields, explains both parameters' effects, signals cost behavior, and tells the agent what to do with the returned slug. The absence of an output schema is mitigated by the explicit field enumeration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters. The description adds a modest performance/scoping insight about the query parameter, but does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action with a distinct resource: it lists every published dataset and enumerates the exact returned fields (title, record count, last-verified date, summary). It also names the covered topic categories, and the closing sentence ties it to sibling tools, making it easy to distinguish from search_records and get_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains when to use the query parameter versus listing everything, and it explicitly points to the sibling tools search_records and get_record as follow-ups using the returned slug. It does not state an explicit 'when not to use this tool' condition, but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsSearch records in a datasetARead-onlyInspect
Look up a specific record — search by state name, chemical, certificate number, product name or any keyword. Searches one dataset's records (case-insensitive substring match across all fields). Returns up to 20 matching records, each with its url, source and verbatim source_quote so the answer can be checked.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Substring to match, case-insensitive, e.g. a state code, chemical name or standard number. | |
| dataset_slug | Yes | Dataset slug from list_datasets, e.g. "graduated-driver-licensing". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds key behavioral details: case-insensitive substring matching across all fields, maximum return of 20 records, and the fact that results include url, source, and verbatim source_quote. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding unique information. First sentence: purpose and searchable fields. Second: scope and matching behavior. Third: return information. No filler, but could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (2 params, no nested objects, no output schema), the description explains purpose, fields searched, matching behavior, result limit, and what each result contains. For a search tool with annotations, this is thorough. Minor gap: no mention of pagination beyond the 20-result limit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. The description adds value by explaining that the query applies as case-insensitive substring match across all fields, and that dataset_slug should come from list_datasets, providing an example. This goes beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Look up a specific record' which is a specific verb+resource pairing. It explicitly lists searchable fields (state name, chemical, certificate number, product name or keyword) and distinguishes from siblings like 'get_record' which likely fetches by ID, and 'list_datasets' which lists available datasets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool: to search across a dataset's records with substring matching. It also mentions the result size (up to 20) and that it returns full records with source URL. However, it does not explicitly say when NOT to use it (e.g., for exact matches use 'get_record') or mention alternatives, but the context is strong enough for a typical agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_quoteCheck a claimed value against a recordARead-onlyInspect
Is this value actually right? Check a claimed fact against a published record instead of trusting it. Reports whether the claim matches the record's stored value (exact, case-insensitive or normalised — the match type is named), whether it appears in the record's verbatim source quote, and returns the source URL and quote so the claim can be traced upstream. Use this whenever you want to confirm a number, date, threshold or status before stating it. Verdicts: matches_record, matches_quote, differs or not_found.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | Field name to check the claim against, e.g. "limit_1_unit". Without it, every stored field is checked. | |
| record_id | No | The record's id, if known (shown in search_records results and in each record's url). Without it, the dataset's stored values are searched for the claimed value. | |
| dataset_slug | Yes | Dataset slug from list_datasets. | |
| claimed_value | Yes | The value to check, exactly as claimed, e.g. "$832,750" or "no passengers younger than 21". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations (readOnlyHint, destructiveHint): it explains match types (exact, case-insensitive or normalized), the possible verdicts (matches_record, matches_quote, differs, not_found), and that it returns the source URL and quote. This is more than what annotations provide. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but is concise and front-loaded with the key question 'Is this value actually right?' Every sentence earns its place: purpose, reporting details, usage guidance, and verdicts. It is not overly long, though it could be more structured (e.g., bullet points for verdicts) to improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description adequately covers the main outputs (verdicts, source URL, quote) and usage scenarios. It explains what happens when optional parameters are omitted. However, it lacks explicit details on the exact response structure (e.g., field names like 'verdict', 'source_url'), which would be helpful for an agent to parse the result. Still, it provides enough context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions), so baseline is 3. The description adds value beyond the schema by clarifying behavior when optional parameters are omitted: 'Without it, every stored field is checked' (for field) and 'Without it, the dataset's stored values are searched for the claimed value' (for record_id). It also explains the match types and verdicts, providing richer semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check a claimed fact against a published record.' It explains what it reports (match types, source quote, URL) and lists possible verdicts. This verb+resource combination is distinct from sibling tools like get_record (fetch full record) or search_records (search for records), making it easy for an agent to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs: 'Use this whenever you want to confirm a number, date, threshold or status before stating it.' This provides strong guidance on when to use the tool. It does not explicitly state when not to use it (e.g., if you need the full record, use get_record instead), but the sibling context and the clear purpose make the decision boundary reasonably clear.
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 tool update
- Changed
list_datasets2 fields changed- added
Input schema / properties / fullAdded value: +{ + "description": "Return each dataset's complete scope statement instead of the first sentence. Off by default: the full text is roughly four times the size and is rarely needed to choose a dataset.", + "type": "boolean" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Optional topic filter, e.g. \"boiler\", \"tariff\" or \"loan limit\". Case-insensitive substring, matched against each dataset's slug, title and full description. Omit it to list every dataset.", + "type": "string" +}
4 tool updates
- First observed
get_record - First observed
list_datasets - First observed
search_records - First observed
verify_quote
Related MCP Connectors
Verify claims with verdict, confidence & cited sources; batch verify, source checks, daily brief.
Verifies legal citations vs primary sources: existence, quote match, proposition support.
Cross-check a factual claim against a verified knowledge graph before you assert it. Never guesses.
Verify a source or provider before an AI agent trusts it. Evidence only; unknown stays unknown.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceVerifies claims with verdicts (supported/disputed/unverifiable), confidence scores, and cited sources by cross-referencing FoundryNet Data Network and web search.MIT
- AlicenseNot gradedqualityBmaintenanceEnables per-claim citation verification for AI-generated text by fetching cited sources and judging whether they support the claim, with verdicts and evidence quotes.64 npmMIT
- AlicenseAqualityBmaintenanceEnables agents to verify whether citations exist and match canonical records, and whether URLs resolve and contain expected content, with evidence-backed confirmed, contradicted, or unknown verdicts.266 PyPIMIT
- AlicenseBqualityCmaintenanceEnables revision-bound source audits with exact article fingerprinting, claim-to-source mapping, quotation verification, and immutable JSON evidence reports for prepublication review.9MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.