fbi-crime-mcp-server

fbi-crime-mcp-server

Exposes the FBI Crime Data Explorer API — crime estimates, agency offense rates, and LEOKA officer safety data via MCP. Supports STDIO or Streamable HTTP transport.

Category
访问服务器

README

<div align="center"> <h1>@cyanheads/fbi-crime-mcp-server</h1> <p><b>Exposes the FBI Crime Data Explorer API — crime estimates, agency offense rates, and LEOKA officer safety data via MCP. STDIO or Streamable HTTP.</b> <div>12 Tools (4 active via CDE API, 8 decommissioned) • 2 Resources</div> </p> </div>

<div align="center">

Version License Docker MCP SDK npm TypeScript Bun

</div>

<div align="center">

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

</div>


Tools

12 tools defined. 4 are active via the FBI CDE API; 8 are decommissioned — the legacy UCR backend (crime-data-api.fr.cloud.gov) was shut down, and those tools return a ServiceUnavailable error on every call with guidance to the FBI CDE website.

Active tools (CDE API)

Tool Description
fbi_get_crime_estimates Monthly offense rates (per 100k) and raw counts from the FBI CDE summarized endpoint. National, state, or agency scope. Covers violent-crime, property-crime, robbery, burglary, larceny, motor-vehicle-theft, arson, aggravated-assault, rape, homicide.
fbi_get_agency_offenses Same CDE summarized endpoint, scoped to a single agency by ORI code. Returns month-by-month rates and counts for that agency.
fbi_get_leoka Law Enforcement Officers Killed and Assaulted (LEOKA) — fatality and assault counts with circumstance and weapon detail, by month or year-to-date.
fbi_get_arson Redirects to fbi_get_crime_estimates with offense="arson" — arson data is available via the CDE summarized endpoint.

Decommissioned tools (always return error)

Tool Status
fbi_search_agencies UCR agency search backend decommissioned
fbi_get_agency UCR agency lookup backend decommissioned
fbi_get_arrests UCR arrests backend decommissioned
fbi_get_hate_crimes UCR hate crimes backend decommissioned
fbi_get_participation UCR participation backend decommissioned
fbi_get_human_trafficking UCR human trafficking backend decommissioned
fbi_get_nibrs_breakdown NIBRS backend decommissioned
fbi_list_code_table UCR code table backend decommissioned

For decommissioned data, consult cde.ucr.cjis.gov or download FBI bulk CSV files.

fbi_get_crime_estimates

Monthly offense rates and raw counts from the FBI CDE summarized endpoint.

  • Scope: national, state (requires state_abbr), or agency (requires ORI)
  • Offense types: violent-crime, property-crime, robbery, burglary, larceny, motor-vehicle-theft, arson, aggravated-assault, rape, homicide
  • Returns per-100k rates and raw actuals by month for the requested date range

fbi_get_agency_offenses

Same CDE summarized endpoint scoped to a single agency, state, or national level.

  • Functionally equivalent to fbi_get_crime_estimates with scope="agency" — useful when the agent's mental model is "offenses for this agency" rather than "crime trends"
  • Provide ORI for agency scope; state_abbr for state scope

fbi_get_leoka

Law Enforcement Officers Killed and Assaulted (LEOKA) data.

  • Two period modes: monthly (by month) or ytd (year-to-date)
  • Returns feloniously killed, accidentally killed, and assault counts with circumstance and weapon detail

fbi_get_arson

Redirects to fbi_get_crime_estimates with offense="arson". The dedicated UCR arson endpoint is decommissioned; arson data remains available via the CDE summarized endpoint.

Resources

Type Name Description
Resource fbi://agency/{ori} [UNAVAILABLE] The UCR agency profile backend has been decommissioned; reading this resource returns a ServiceUnavailable error.
Resource fbi://state/{state_abbr} [UNAVAILABLE] The CDE state participation backend has been decommissioned; reading this resource returns a ServiceUnavailable error.

Features

Built on @cyanheads/mcp-ts-core:

  • Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
  • Unified error handling — handlers throw, framework catches, classifies, and formats
  • Pluggable auth: none, jwt, oauth
  • Swappable storage backends: in-memory, filesystem, Supabase, Cloudflare KV/R2/D1
  • Structured logging with optional OpenTelemetry tracing
  • STDIO and Streamable HTTP transports

FBI Crime Data Explorer-specific:

  • CDE API (/cde/summarized/, /cde/leoka/) — the surviving FBI endpoints post-UCR decommission
  • Decommissioned tools return a ServiceUnavailable error with a recovery hint pointing to cde.ucr.cjis.gov — agents can report the gap rather than silently failing
  • DEMO_KEY mode for no-config exploration; registered api.data.gov key for production throughput

Getting started

Add the following to your MCP client configuration file. See the FBI CDE API key registration to obtain a key — DEMO_KEY works for exploration but is rate-limited.

{
  "mcpServers": {
    "fbi-crime-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/fbi-crime-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "FBI_API_KEY": "your-api-key"
      }
    }
  }
}

Or with npx (no Bun required):

{
  "mcpServers": {
    "fbi-crime-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/fbi-crime-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "FBI_API_KEY": "your-api-key"
      }
    }
  }
}

Or with Docker:

{
  "mcpServers": {
    "fbi-crime-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "-e", "FBI_API_KEY=your-api-key",
        "ghcr.io/cyanheads/fbi-crime-mcp-server:latest"
      ]
    }
  }
}

For Streamable HTTP, set the transport and start the server:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 FBI_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.3.2 or higher (or Node.js v24+).
  • An api.data.gov API key for the FBI CDE API. DEMO_KEY works for testing but is rate-limited to ~1,000 req/hr from a shared pool.

Installation

  1. Clone the repository:
git clone https://github.com/cyanheads/fbi-crime-mcp-server.git
  1. Navigate into the directory:
cd fbi-crime-mcp-server
  1. Install dependencies:
bun install
  1. Configure environment:
cp .env.example .env
# edit .env and set FBI_API_KEY

Configuration

All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:

Variable Description Default
FBI_API_KEY Required. api.data.gov API key for the FBI CDE API. Use DEMO_KEY for limited testing. —
FBI_API_BASE_UCR Override UCR base URL. https://api.usa.gov/crime/fbi/ucr
FBI_API_BASE_CDE Override CDE base URL. https://api.usa.gov/crime/fbi/cde
FBI_REQUEST_TIMEOUT_MS Per-request timeout in milliseconds. 15000
MCP_TRANSPORT_TYPE Transport: stdio or http. stdio
MCP_HTTP_PORT Port for HTTP server. 3010
MCP_HTTP_ENDPOINT_PATH HTTP endpoint path. /mcp
MCP_PUBLIC_URL Public origin override for TLS-terminating reverse-proxy deployments. none
MCP_AUTH_MODE Auth mode: none, jwt, or oauth. none
MCP_LOG_LEVEL Log level (RFC 5424). info
MCP_GC_PRESSURE_INTERVAL_MS Opt-in Bun-only forced-GC pressure interval (ms). Try 60000 if RSS grows under sustained HTTP load. 0
LOGS_DIR Directory for log files (Node.js only). <project-root>/logs
STORAGE_PROVIDER_TYPE Storage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1. in-memory
OTEL_ENABLED Enable OpenTelemetry instrumentation. false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • Run checks and tests:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    

Docker

docker build -t fbi-crime-mcp-server .
docker run --rm -e FBI_API_KEY=your-key -p 3010:3010 fbi-crime-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/fbi-crime-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

Directory Purpose
src/index.ts createApp() entry point — registers tools, resources, and inits services.
src/config Server-specific environment variable parsing and validation with Zod.
src/mcp-server/tools Tool definitions (*.tool.ts). 12 tools — 4 active via CDE API, 8 decommissioned.
src/mcp-server/resources Resource definitions (*.resource.ts). Agency and state overview resources.
src/services FBI API service layer — UCR and CDE clients with shared retry/timeout logic.
tests/ Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources via the barrels in src/mcp-server/*/definitions/index.ts
  • Active tools call the CDE API (/cde/summarized/, /cde/leoka/); decommissioned tools throw serviceUnavailable with a recovery hint
  • Wrap FBI API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues and pull requests are welcome. Run checks and tests before submitting:

bun run devcheck
bun run test

License

Apache-2.0 — see LICENSE for details.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选