referencesource.org
Server Details
Verified reference data; each record carries its source URL and quote. verify_quote checks claims.
- Status
- Healthy
- Uptime
- 98.3% over 60 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 maps to a distinct stage of the read-only workflow: list_datasets discovers datasets, search_records finds records within one, get_record fetches a single record by id, and verify_quote validates a claim. Although get_record and search_records both return records, the lookup-vs-search split is explicitly described, so selection is unambiguous.
All four names follow a clean verb_noun pattern: get_record, list_datasets, search_records, verify_quote. No mixing of conventions or vague one-word verbs.
Four tools exactly cover the browse/search/fetch/verify loop of a reference-data server, with no redundant or filler entries. This is a tightly scoped set for the domain.
The read-only lifecycle (discover, search, retrieve, verify) is fully covered, and no create/update/delete is expected for curated reference data. Minor friction remains: descriptions alternate between 'id' and 'slug' for the same key, and there is no explicit way to page beyond the 20-result search cap or inspect a dataset's schema.
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; if that phrase matches nothing, the words are matched separately and the answer says so in `matched_on`. Omit it to list every dataset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, non-destructive and closed-world, so the safety profile is covered. The description adds meaningful behavioral context beyond that: a cost/size tradeoff for the unfiltered list, the ~4x size of full scope text, and the degraded-match fallback surfaced in `matched_on`. It stops short of describing pagination, limits, or the result envelope, which keeps it out of the top band.
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, the payload (what it returns, how to filter cheaply, what to do with the slug) is front-loaded, and the opening question is answered immediately rather than left hanging. No sentence is filler.
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?
There is no output schema, so the description correctly enumerates the returned fields (title, record count, last-verified date, one-sentence summary) and the dataset domains covered. Combined with annotations and a 100%-documented 2-parameter schema, an agent has everything needed to call it and use the result.
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 both `full` and `query` are already fully documented in the schema, including the substring semantics and matched_on fallback. The description only restates the `query` use case and adds a cost cue; it says nothing about `full`, which the schema has to carry alone. Baseline 3 is the correct ceiling here.
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?
States a specific verb and resource ('lists every published dataset') plus the exact fields returned (title, record count, last-verified date, summary). It also names where to go next (search_records / get_record), so an agent can distinguish it from its siblings without opening any schema.
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?
Explicitly says to pass `query` for topic-filtered listing, when to omit it ('Omit it to list every dataset' is in the schema, and the description frames the whole-list case), and warns that the filtered path is 'much cheaper than reading the whole list.' It also states the follow-up workflow: use the returned slug with search_records or get_record.
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_datasets1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"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."New value: +"Optional topic filter, e.g. \"boiler\", \"tariff\" or \"loan limit\". Case-insensitive substring, matched against each dataset's slug, title and full description; if that phrase matches nothing, the words are matched separately and the answer says so in `matched_on`. Omit it to list every dataset."
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 a company, figure or citation before you rely on it. Card or crypto; signed receipt.
Verify claims with verdict, confidence & cited sources; batch verify, source checks, daily brief.
Paid claim verification with cited web evidence, source provenance, snapshots, and hashes.
Verifies legal citations vs primary sources: existence, quote match, proposition support.
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 users to verify citations and bibliographies and to check whether source documents support factual claims, using local inference, exact evidence provenance, and deterministic verdicts.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.47 npmMIT
- AlicenseAqualityBmaintenanceEnables language models to verify claims against a local document corpus by returning a literal supporting quote, a contradiction, or an explicit refusal when evidence is insufficient. Runs deterministically offline over local sources without network access or LLM calls.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.