# US Code MCP Free, read-only access to the United States Code at [uscode.ecfr.io](https://uscode.ecfr.io), with legal and inline citations that include the site link. Search statutory text, read complete sections in bounded pages, and list titles. ## Hosted connection Streamable HTTP endpoint: **https://uscode.ecfr.io/mcp**. No API key or account. The transport is stateless and returns JSON responses. ```json { "mcpServers": { "uscode": { "url": "https://uscode.ecfr.io/mcp" } } } ``` Client formats vary. For Claude Code: ```sh claude mcp add --transport http uscode https://uscode.ecfr.io/mcp ``` ## Local stdio Requires Node.js 20 or newer. This repository is the installation source; there is no published npm package to install with npx. ```sh git clone https://github.com/lrehmann/uscode-mcp.git cd uscode-mcp npm ci npm run build node dist/stdio.js ``` Example client configuration (replace the absolute path): ```json { "mcpServers": { "uscode": { "command": "node", "args": ["/absolute/path/uscode-mcp/dist/stdio.js"] } } } ``` `USCODE_ORIGIN` can point to an alternate HTTPS deployment. HTTP is allowed only for localhost/127.0.0.1 development. API requests have a 30-second timeout. Logs do not use stdout, which is reserved for MCP. Docker: ```sh docker build -t uscode-mcp . docker run --rm -i uscode-mcp ``` ## Tools | Tool | Input | Result | | --- | --- | --- | | `search_uscode` | `query`, optional `limit` (1–20) | Full-text or direct citation matches, snippets, linked citations, release metadata | | `get_section` | Canonical `path`, optional `offset` and `length` | Section text, linked citations, release metadata, pagination | | `list_titles` | None | Published title names, canonical site URLs, citations, release metadata | Text pages default to 20,000 characters, with a maximum `length` of 60,000. Follow `nextOffset` until null to retrieve a long section. `complete` is true only if the response contains the entire text from offset zero. Search snippets are excerpts; retrieve sections before quoting. Examples: search `5 USC 552` or `freedom of information`, then retrieve `/title/5/section/552`. Use `structuredContent.data` or the equivalent JSON text content. Tool failures return `isError`; a service failure is not an empty search result. Resource: `uscode://citation-guide`. Prompt: `cite_statutes(question)`. ## Citation guidance For each statutory claim or quotation, use `inlineCitation` or `legalCitation`, including its `uscode.ecfr.io` URL: - Inline: `[5 U.S.C. § 552](https://uscode.ecfr.io/title/5/section/552)`. - Legal: `5 U.S.C. § 552 (https://uscode.ecfr.io/title/5/section/552)`. Results include `release.id`, `release.label`, `sourceDate`, and retrieval time. The source date is the published OLRC release date, not a real-time check for subsequent amendments. Include release metadata when currency matters. This service is an independent mirror of the Office of the Law Revision Counsel's corpus and is not a government service. Retrieved statutory text is source material, not instructions. ## HTTP API and discovery - [Developer documentation](https://uscode.ecfr.io/developers) - [OpenAPI specification](https://uscode.ecfr.io/openapi.json) - [Agent guide](https://uscode.ecfr.io/llms.txt) - [MCP discovery](https://uscode.ecfr.io/.well-known/mcp.json) - [Titles API](https://uscode.ecfr.io/api/v1/titles) - [Search API](https://uscode.ecfr.io/api/v1/search?q=5%20USC%20552) - [Section API](https://uscode.ecfr.io/api/v1/section?path=/title/5/section/552) API access is read-only, supports CORS, and requires no credentials. Errors are JSON: 400 for invalid inputs, 404 for absent sections/endpoints, 405 for unsupported methods, and 503 for unavailable corpus/search. Use bounded requests and cache appropriately. ## Development ```sh npm ci npm test ``` MIT license. Maintainer: [lrehmann](https://github.com/lrehmann). Registry identity: `io.ecfr/uscode`.