referencesource.org
Server Details
Verified reference data; each record carries its source URL and quote. verify_quote checks claims.
- Status
- Healthy
- Uptime
- 98.7% over 82 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- joelp22-maker/referencesource-mcp
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 8 tools
The set cleanly splits into reference-data lookup tools (list_datasets, search_records, get_record, verify_quote) and Muse workflow tools (brief_for_joe, next_task_for_muse, submit_task_result, message_supervisor). Within each cluster, search vs. get vs. verify are clearly distinct, as are task intake, result submission, and supervisor messaging.
All names use snake_case and most follow a verb_noun pattern: get_record, list_datasets, search_records, verify_quote, message_supervisor, submit_task_result. brief_for_joe and next_task_for_muse are noun-phrase exceptions, but they remain readable and purpose-specific.
Eight tools is well-scoped for a reference-data server with a lightweight task workflow. Each tool maps to a distinct operation, and there is no obvious redundancy or bloat.
The surface covers dataset discovery, record search and fetch, claim verification, task retrieval/submission, and supervisor messaging, which is a coherent lifecycle. Minor gaps include no dedicated task-status/history tool and no separate dataset metadata lookup beyond list_datasets, but agents can work around these.
Available Tools
8 toolsbrief_for_joeDaily brief for JoeARead-onlyIdempotentInspect
For the referencesource Muse connector only (bearer token required). The studio's latest plain-English daily brief: what was decided, what landed, and the items waiting on Joe, each as the task, why it matters and the steps. Read-only; regenerated each morning by tools/brief.py and published with the next deploy, so it can lag the phone push.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| brief | Yes | The whole brief as plain text. |
| items | Yes | |
| generated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-structured context: bearer-token auth, a nightly regeneration by tools/brief.py, and the fact that the content can lag the phone push — a staleness warning an agent cannot get from annotations or schema.
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?
Two sentences, both dense; the connector/scope and auth constraint are front-loaded before the content description. Slightly over-packed with provenance detail ('published with the next deploy'), but essentially no redundancy.
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?
An output schema exists, so return values need not be specified, and yet the description still sketches the payload shape. Together with auth, scope and freshness caveats, an agent has everything needed to call it correctly; only the relative-position vs sibling tools is unstated.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter claims are made that could mislead.
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 resource and enumerates its contents ('what was decided, what landed, and the items waiting on Joe, each as the task, why it matters and the steps'), which is well beyond a restated name. It does not explicitly distinguish itself from the sibling next_task_for_muse, whose scope ('next task') overlaps with 'items waiting on Joe', so it stops short of a 5.
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?
Names a real applicability gate ('For the referencesource Muse connector only') and an auth prerequisite (bearer token required), which tells the agent when it can be called at all. It never says when to prefer this over next_task_for_muse or message_supervisor, so the guidance stays implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
message_supervisorMessage the supervisorAIdempotentInspect
For the referencesource Muse connector only (bearer token required). Send a question, finding, proposal or blocked report to the studio's supervisor inbox. Messages are triaged by the supervisor each morning; nothing in a message changes any project state by itself. Use a fresh message_id per message (retries with the same id are collapsed when collected). Body at most 3500 characters. Reports about mail to contact@referencesource.org are summaries only: per email the sender, subject, date and a one-line gist, never the email's text; a body over 1500 characters or with quoted email is withheld when collected. Replies come back to you as draft tasks for Joe's approval; never reply unprompted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Markdown, at most 3500 characters. | |
| kind | Yes | ||
| subject | Yes | At most 120 characters. | |
| task_id | No | Optional: the queued task this is about. | |
| message_id | Yes | Client-generated id, e.g. a UUID; the same id sent twice is kept once. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| stored | Yes | |
| triage | No | when and how the message will be read |
| message_id | Yes | |
| recorded_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: auth requirement, that nothing in a message changes project state, triage timing, dedup semantics on message_id, body/subject size caps, and a specific withholding rule for mail reports over 1500 characters or containing quoted email. The reply-as-draft-task flow is exactly the kind of side effect an agent needs disclosed before calling.
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?
Front-loads the connector restriction and the core action, then layers constraints. Dense but mostly earning its place; the 3500-character limit and idempotency restate the schema/annotations, which is minor redundancy.
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?
With an output schema present and annotations covering safety and idempotency, the description supplies the remaining critical context: auth, triage cadence, no state mutation, content restrictions for mail reports, and the reply path. Only the sibling-routing question is left unaddressed.
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 80%, so the schema already documents message_id dedup, the subject/body length limits and task_id. The description reinforces message_id practice ('fresh id per message, retries collapsed') but repeats the 3500-character body cap verbatim and says nothing about task_id or how kind affects handling. Baseline 3.
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 ('Send a question, finding, proposal or blocked report to the studio's supervisor inbox') and enumerates the kinds it accepts, so the action is unambiguous. It does not, however, contrast itself with plausible siblings like brief_for_joe or submit_task_result, leaving the agent to infer the boundary.
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?
Gives clear operating context: restricted to the referencesource Muse connector with a bearer token, messages are triaged each morning, and replies arrive as draft tasks for Joe's approval with an explicit 'never reply unprompted' exclusion. Missing is an explicit statement of when to prefer this over brief_for_joe or submit_task_result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_task_for_museNext task for MuseAIdempotentInspect
For the referencesource Muse connector only (bearer token required). Returns the oldest open task from the studio's queue: id, instructions, the sites the task may read, the output format expected, and where to deliver the result. Returns {no_tasks: true} when the queue is empty. login_allowed lists the hosts where the task may sign in, with a credential already in Muse's own store; empty means read-only, never sign in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| no_tasks | Yes | |
| queue_generated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety flags, but the description adds real context beyond them: the bearer-token auth requirement, the empty-queue sentinel, and the crucial login_allowed semantics ('empty means read-only, never sign in'). It does not clarify whether fetching a task claims/removes it from the queue, which leaves the readOnlyHint=false / idempotentHint=true pairing unexplained.
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?
Front-loads the access scope and the core action, then packs return fields, empty-state, and credential rules into compact clauses. Slightly dense in the final sentence but every clause carries information an agent needs.
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?
An output schema exists, so return-value detail is a bonus the description supplies anyway. Auth requirements, empty-state handling, and sign-in constraints are all covered; the one omission is whether calling this consumes the task, which matters given the mutation-implying annotations.
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?
Zero parameters, so the schema carries nothing and there is no parameter semantics to add. Baseline 4 applies; the description correctly spends its budget on return-field meaning instead.
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+resource ('Returns the oldest open task from the studio's queue') and scopes it to the referencesource Muse connector, which separates it from siblings like get_record and list_datasets. The enumerated return fields make the tool's contract unambiguous.
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?
Gives clear usage context: connector-only, bearer token required, and the empty-queue case ({no_tasks: true}). It doesn't explicitly name the alternative/companion tool (submit_task_result) or when to prefer it, so it falls just short of explicit alternatives.
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.
submit_task_resultSubmit a task resultAInspect
For the referencesource Muse connector only (bearer token required). Records the result of a task fetched with next_task_for_muse. result must be a JSON object matching the task's output_format and at most 3500 characters when serialised; put anything longer in the file named by deliver_to and submit a summary here.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional: what was hard, what was skipped, what a human should know. | |
| result | Yes | The result, matching the task's output_format. | |
| status | Yes | ||
| task_id | Yes | The id returned by next_task_for_muse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| stored | Yes | analytics (durable) or none (no store bound: the file copy is the record) |
| task_id | Yes | |
| deliver_to | No | |
| recorded_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing the auth requirement (bearer token), the 3500-character serialisation cap on `result`, and the overflow strategy (write the long form to the deliver_to file and submit a summary). Annotations cover the mutation/safety profile, so this added operational context is the right kind of contribution; it does not cover failure or retry behavior.
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 tight clauses with the connector scope and auth requirement front-loaded before the behavioral constraint on `result`. No filler, and the most decision-relevant constraints appear first.
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?
Output schema exists, so return values need no explanation, and the description covers the two things an agent could not infer: auth and the result size/overflow rule. The dangling deliver_to reference leaves a gap about where the overflow file actually comes from.
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 75%, so the schema already documents task_id and note; the description adds real meaning for `result` by specifying it must be a JSON object matching the task's output_format and bounded at 3500 characters. The reference to 'the file named by deliver_to' names a parameter that does not exist in the schema, which weakens an otherwise useful elaboration.
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+resource ('Records the result of a task') and immediately scopes it to the referencesource Muse connector, naming the sibling next_task_for_muse that produces the input. An agent can distinguish it from get_record/search_records/verify_quote without opening a 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?
Clearly states the precondition (a task fetched with next_task_for_muse) and the environment constraint (connector-only, bearer token required), which tells the agent when this tool is applicable. It does not, however, state what to do instead when those conditions are unmet, so it stops short of explicit when-not guidance.
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.
2 tool updates
- Added
brief_for_joe - Changed
next_task_for_muse2 fields changed- added
Output schema / properties / task / properties / login_allowedAdded value: +{ + "description": "Hosts where this task may sign in, with a credential already in Muse's own store. Empty: read-only, never sign in.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / task / requiredPrevious value: -[ - "id", - "instructions", - "allowed_sites", - "output_format", - "deliver_to", - "created_at" -]New value: +[ + "id", + "instructions", + "allowed_sites", + "output_format", + "login_allowed", + "deliver_to", + "created_at" +]
1 tool update
- Added
message_supervisor
2 tool updates
- Added
next_task_for_muse - Added
submit_task_result
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.
Source-backed public tables with citations, claim checks, and reviewable corrections.
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.
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 gradedqualityDmaintenanceEnables per-claim citation verification for AI-generated text by fetching cited sources and judging whether they support the claim, with verdicts and evidence quotes.57 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.