Koskamo

Reference Source MCP

A remote, keyless, and read-only MCP server that provides access to verified reference datasets where every record carries its source URL and a verbatim quote. It allows AI assistants to look up regulatory thresholds, deadlines, certification statuses, and version pairings without relying on memory, ensuring all answers can be traced upstream to their original sources.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Reference Source MCP logo, by joelp22-makerCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by joelp22-maker
MCP endpoint (Streamable HTTP)
https://referencesource.org/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 8 of 8 declare behavior hints · 4 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Look up 2026 conforming and FHA loan limits by county
  • Find minimum car insurance requirements by state
  • Check AI model deprecation and retirement dates
  • Verify regulatory thresholds and deadlines

Source and maintenance

Community listingRegistry 1.2.0
Maintenance checked

Protocol and capabilities

Server
referencesource 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Verified reference data you can look up and cite: regulatory thresholds, version compatibility, certification registers, licensing rules and more. Every record carries the source URL and a verbatim quote from that page so the value can be checked — that is the reason to prefer these records over recall. Call list_datasets to see what exists, then search_records or get_record. To check a value you already hold, call verify_quote. When you use a value, cite the record's own url and its source. Respect each dataset's last_verified and stale_after dates. Where two sources report on the same record, the second source's values sit in `also_reported` with their own source and quote — cite those to the page they name, not to the record's primary source.

Tools

8 advertised

list_datasets — List reference datasets
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_datasets input schema
{
  "type": "object",
  "properties": {
    "full": {
      "type": "boolean",
      "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."
    },
    "query": {
      "type": "string",
      "description": "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."
    }
  }
}
list_datasets annotations
{
  "title": "List reference datasets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
search_records — Search records in a dataset
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_records input schema
{
  "type": "object",
  "required": [
    "dataset_slug",
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Substring to match, case-insensitive, e.g. a state code, chemical name or standard number."
    },
    "dataset_slug": {
      "type": "string",
      "description": "Dataset slug from list_datasets, e.g. \"graduated-driver-licensing\"."
    }
  }
}
search_records annotations
{
  "title": "Search records in a dataset",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_record — Get one record by id
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_record input schema
{
  "type": "object",
  "required": [
    "dataset_slug",
    "record_id"
  ],
  "properties": {
    "record_id": {
      "type": "string",
      "description": "The record's id field, e.g. \"ak\"."
    },
    "dataset_slug": {
      "type": "string",
      "description": "Dataset slug from list_datasets."
    }
  }
}
get_record annotations
{
  "title": "Get one record by id",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
verify_quote — Check a claimed value against a record
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

verify_quote input schema
{
  "type": "object",
  "required": [
    "dataset_slug",
    "claimed_value"
  ],
  "properties": {
    "field": {
      "type": "string",
      "description": "Field name to check the claim against, e.g. \"limit_1_unit\". Without it, every stored field is checked."
    },
    "record_id": {
      "type": "string",
      "description": "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": {
      "type": "string",
      "description": "Dataset slug from list_datasets."
    },
    "claimed_value": {
      "type": "string",
      "description": "The value to check, exactly as claimed, e.g. \"$832,750\" or \"no passengers younger than 21\"."
    }
  }
}
verify_quote annotations
{
  "title": "Check a claimed value against a record",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
next_task_for_muse — Next task for Muse
Advertised by the server during the last successful anonymous check.

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.

next_task_for_muse input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
next_task_for_muse output schema
{
  "type": "object",
  "required": [
    "no_tasks"
  ],
  "properties": {
    "task": {
      "type": "object",
      "required": [
        "id",
        "instructions",
        "allowed_sites",
        "output_format",
        "login_allowed",
        "deliver_to",
        "created_at"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "created_at": {
          "type": "string"
        },
        "deliver_to": {
          "type": "string"
        },
        "instructions": {
          "type": "string"
        },
        "allowed_sites": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "login_allowed": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Hosts where this task may sign in, with a credential already in Muse's own store. Empty: read-only, never sign in."
        },
        "output_format": {
          "type": "string"
        }
      }
    },
    "no_tasks": {
      "type": "boolean"
    },
    "queue_generated": {
      "type": "string"
    }
  }
}
next_task_for_muse annotations
{
  "title": "Next task for Muse",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_task_result — Submit a task result
Advertised by the server during the last successful anonymous check.

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.

submit_task_result input schema
{
  "type": "object",
  "required": [
    "task_id",
    "status",
    "result"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Optional: what was hard, what was skipped, what a human should know."
    },
    "result": {
      "type": "object",
      "description": "The result, matching the task's output_format."
    },
    "status": {
      "enum": [
        "done",
        "blocked",
        "needs_info"
      ],
      "type": "string"
    },
    "task_id": {
      "type": "string",
      "description": "The id returned by next_task_for_muse."
    }
  },
  "additionalProperties": false
}
submit_task_result output schema
{
  "type": "object",
  "required": [
    "ok",
    "task_id",
    "recorded_at",
    "stored"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "stored": {
      "type": "string",
      "description": "analytics (durable) or none (no store bound: the file copy is the record)"
    },
    "task_id": {
      "type": "string"
    },
    "deliver_to": {
      "type": "string"
    },
    "recorded_at": {
      "type": "string"
    }
  }
}
submit_task_result annotations
{
  "title": "Submit a task result",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
brief_for_joe — Daily brief for Joe
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

brief_for_joe input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
brief_for_joe output schema
{
  "type": "object",
  "required": [
    "generated",
    "brief",
    "items"
  ],
  "properties": {
    "brief": {
      "type": "string",
      "description": "The whole brief as plain text."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "due": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "what": {
            "type": "string"
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string"
          }
        }
      }
    },
    "generated": {
      "type": "string"
    }
  }
}
brief_for_joe annotations
{
  "title": "Daily brief for Joe",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
message_supervisor — Message the supervisor
Advertised by the server during the last successful anonymous check.

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.

message_supervisor input schema
{
  "type": "object",
  "required": [
    "message_id",
    "kind",
    "subject",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "description": "Markdown, at most 3500 characters."
    },
    "kind": {
      "enum": [
        "question",
        "finding",
        "proposal",
        "blocked"
      ],
      "type": "string"
    },
    "subject": {
      "type": "string",
      "description": "At most 120 characters."
    },
    "task_id": {
      "type": "string",
      "description": "Optional: the queued task this is about."
    },
    "message_id": {
      "type": "string",
      "description": "Client-generated id, e.g. a UUID; the same id sent twice is kept once."
    }
  },
  "additionalProperties": false
}
message_supervisor output schema
{
  "type": "object",
  "required": [
    "ok",
    "message_id",
    "recorded_at",
    "stored"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "stored": {
      "type": "string"
    },
    "triage": {
      "type": "string",
      "description": "when and how the message will be read"
    },
    "message_id": {
      "type": "string"
    },
    "recorded_at": {
      "type": "string"
    }
  }
}
message_supervisor annotations
{
  "title": "Message the supervisor",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
547 ms
95th percentile latency
547 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 547 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http reference-source-mcp-referencesource https://referencesource.org/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add reference-source-mcp-referencesource --url https://referencesource.org/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable reference-source-mcp-referencesource in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "reference-source-mcp-referencesource": {
      "url": "https://referencesource.org/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "reference-source-mcp-referencesource": {
      "type": "streamableHttp",
      "url": "https://referencesource.org/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start reference-source-mcp-referencesource and inspect its tools.
VS Code configuration
{
  "servers": {
    "reference-source-mcp-referencesource": {
      "type": "http",
      "url": "https://referencesource.org/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http reference-source-mcp-referencesource https://referencesource.org/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://referencesource.org/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "reference-source-mcp-referencesource": {
      "serverUrl": "https://referencesource.org/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Reference Source MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.