Ask a general-purpose AI assistant "is ZIP 21201 safe?" and you will get a confident paragraph assembled from whatever it read during training: news stories, forum posts, real estate copy. It will sound informed. It will not be a measurement, it will not be current, and it cannot tell you where it came from. That is the problem the Model Context Protocol was built to solve.
What MCP is
MCP, the Model Context Protocol, is an open standard that lets an assistant call outside tools during a conversation. A connector publishes a small list of tools with typed inputs and outputs. When a question needs one of them, the assistant calls the tool, gets a structured result, and writes its answer from that result instead of from memory.
The CrimeScore connector at mcp.crimescore.info publishes one tool, published_score. It takes a region code, a five-digit ZIP or a county FIPS, and returns the published score for it: percentile, national rank, state rank, score index, snapshot month, and model hash. It is read-only. An assistant can look up scores and nothing else.
Why this beats retrieval
The usual way to give an assistant "knowledge" is retrieval: chop documents into pieces, index them, and stuff relevant pieces into the prompt. It works for prose. It works badly for numbers, because the assistant still has to read a number out of a passage and might read the wrong one, an old one, or none at all.
A tool call returns the number itself, in a field with a name, for the exact region asked about, from the current publication. There is nothing to misread. The assistant's job shrinks to explaining a fact it was handed, which is the job it is good at.
Two properties matter especially for crime data:
- Determinism. The same region code returns the same published score every time until the next monthly release. Two users asking the same question get the same answer.
- Provenance. Every result carries its month and its model hash. An assistant can say "as of July 2026, model version 3ef8ff37" and be right.
What a good answer looks like
With the connector attached, the question "compare 21201 and 21228" produces two tool calls and an answer along these lines: 21201, downtown Baltimore, is at the 99.4th percentile, Extreme, ranked #63 nationally; 21228, Catonsville, is at the 94.4th percentile, Very High, ranked #608. Both are in the top tenth of scored ZIPs for reported crime, and 21201 has substantially more. Every number in that sentence came from the tool, and every one can be checked on this site.
Setting it up
In Claude Code, one command registers the connector:
claude mcp add --transport http crimescore https://mcp.crimescore.info/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Claude Desktop and other MCP clients take the same HTTP endpoint and header in their configuration. From then on, questions about ZIPs and counties route through the tool automatically. The developer docs have the exact snippets, plus a raw JSON-RPC example for scripts.
Boundaries worth keeping
A connector is only as trustworthy as what it refuses to do. This one does not accept addresses, does not return incidents, and does not take any input about people. It answers one question, "how does this area compare", with a published number. That narrowness is the point: it is what lets the assistant's answer be both useful and honest about its limits. The methodology spells those limits out.
To try it, the live demo on the home page makes the same call the assistant would. To use it in your own assistant, request a token.