Skip to main content
Glama
dathere

FBI Crime Data MCP Server

by dathere

FBI Crime Data MCP Server

PyPI CI codecov

An MCP (Model Context Protocol) server that provides access to the FBI's Crime Data Explorer API.

Query crime statistics, arrest data, hate crimes, NIBRS incidents, law enforcement employment, and more — directly from any MCP-compatible client.

Created for data journalists, researchers, and anyone interested in exploring US crime data with the power of language models. Initially created for use by the Policy Analyst Agent of the qsv Claude Cowork plugin.

Features

  • 17 tools covering a wide range of crime data topics

    • Crime trends and Summary Reporting System (SRS) crime data

    • National Incident Based Reporting System (NIBRS) incident-based data and national estimates

    • Arrest statistics with demographic breakdowns

    • Hate crime incidents by bias motivation

    • Expanded homicide and property crime details

    • Police employment, Law Enforcement Officers Killed and Assaulted (LEOKA), Law Enforcement Suicide Data Collection (LESDC), and use of force

    • Agency lookup, reference data, cache management, and spillover reading

  • Geographic query levels — national, state, and agency for most tools; some also support region (get_police_employment, get_nibrs_estimation) or agency-type / population-size breakdowns (get_nibrs_estimation) — all with automatic parameter validation

  • Smart yearly aggregation — monthly API data is automatically rolled up into yearly totals (sums for counts, averages for rates, last value for population), with an option for monthly granularity

  • Tiered disk-backed caching — 90-day time-to-live (TTL) for stable data (trends, reference, summaries, NIBRS estimation), 30-day TTL for dynamic data (incidents, arrests, agency lookups), and 1-day TTL for the homepage summary (refresh dates change frequently)

  • Spillover handling — responses exceeding 128K characters are saved to disk with a preview returned, so large queries are never silently truncated

  • Input validation — date format/ordering checks, offense and bias code validation, and level-based parameter requirements with clear error messages

  • Sliding-window rate limiting — 1,000 requests/hour with transparent wait-time feedback

  • Reference tools for agency lookups (by state, Originating Agency Identifier (ORI), or district with name filtering) and code translations

Related MCP server: MCP Server Police UK

Quick Start

  1. Get a free API key from api.data.gov

  2. Run with Claude Desktop — add to your claude_desktop_config.json:

{
  "mcpServers": {
    "fbi-crime-data": {
      "command": "uvx",
      "args": ["fbi-crime-data-mcp"],
      "env": {
        "FBI_API_KEY": "your-api-key-here"
      }
    }
  }
}
  1. Or run directly:

FBI_API_KEY=your-key uvx fbi-crime-data-mcp

Available Tools (17)

Core Crime Data

Tool

Description

get_summarized_crime_data

SRS crime data — rates, actuals, clearances for violent crime, property crime, homicide, rape, robbery, assault, burglary, larceny, motor vehicle theft, arson

get_nibrs_data

NIBRS incident-based data for 70+ offense types

get_arrest_data

Arrest statistics by offense with optional demographic breakdowns (male, female, sex, race)

get_crime_trends

National crime trend percent changes across 10 crime types

get_nibrs_estimation

NIBRS national estimates by state, region, agency type, or population size

Specialized Crime Data

Tool

Description

get_hate_crime_data

Hate crime incidents by bias motivation (30+ categories)

get_expanded_homicide_data

Supplementary Homicide Reports — victim/offender demographics, weapons, circumstances

get_expanded_property_data

Expanded property crime details — stolen/recovered values for burglary, larceny, motor vehicle theft (MVT), robbery

Law Enforcement Data

Tool

Description

get_police_employment

Officer and civilian employee counts by gender, rates per 1,000 population

get_leoka_data

Officers killed and assaulted — weapons, circumstances, demographics

get_lesdc_data

Law enforcement suicide data — demographics, race, duty status, and more

get_use_of_force_data

Use of force incidents resulting in death, serious injury, or firearm discharge

Overview

Tool

Description

get_cde_homepage_summary

CDE homepage summary — mission statement, navigation, data freshness, date ranges, and national crime trends

Reference & Lookup

Tool

Description

lookup_agency

Find law enforcement agencies by state, ORI code, or judicial district

get_reference_data

State lists, offense/bias code lookups, data refresh dates

manage_cache

View cache stats, clear all entries, or clear only expired entries

read_spillover

Read spillover files saved when tool responses exceed the size limit

Large Responses

When a tool response exceeds 128,000 characters, the full result is saved to ~/.cache/fbi-crime-data-mcp/spillover/ and a truncated preview is returned with the file path. To avoid this, narrow your query (shorter date range, specific state/agency).

Data Sources

All data comes from the FBI's Crime Data Explorer API, which provides Uniform Crime Reporting (UCR) data including both the Summary Reporting System (SRS) and the National Incident-Based Reporting System (NIBRS).

API Rate Limits

  • Registered key: 1,000 requests per hour (rolling window)

  • DEMO_KEY: 30 requests per IP per hour

The server includes a built-in rate limiter (1,000 req/hr). The DEMO_KEY limit is enforced API-side.

Development

# Install dependencies
uv sync

# Run the server locally
FBI_API_KEY=your-key uv run fbi-crime-data-mcp

# Run tests
uv run pytest

License

MIT

Available Tools

17 tools
get_arrest_dataA

Get arrest statistics by offense, optionally broken down by demographics.

Args: offense: Arrest offense code (e.g., "all", "11" for murder, "30" for robbery, "150" for drug abuse). Use get_reference_data with data_type="offenses" and offense_type="arrest" for full list. level: Geographic level — "national", "state", or "agency" data_type: "counts" for time series or "totals" for demographic breakdowns from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") category: Optional demographic breakdown — "male", "female", "race", or "sex" aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity). Only applies when data_type is "counts".

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
offenseYes
to_dateYes
categoryNo
aggregateNoyearly
data_typeYes
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Explains parameter dependencies (e.g., aggregate only for counts). Could mention data freshness or read-only nature, but overall transparent about tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear 'Args' section. Each sentence adds value without redundancy. Efficiently conveys necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all parameters with dependencies explained. Includes cross-reference for offense codes. Output schema exists so return values need not be described. Complete for a 9-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage), but the description provides extensive semantics for all 9 parameters, including examples, defaults, constraints, and cross-references. Adds significant value beyond bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get arrest statistics by offense, optionally broken down by demographics.' The verb 'get' and resource 'arrest statistics' are specific. Differentiates from sibling tools like get_crime_trends which focus on broader crime data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides detailed parameter instructions including examples for offense codes, required parameters for geographic levels, and points to get_reference_data for full offense list. Lacks explicit when-not-to-use or direct comparison to siblings, but sufficient for a complex tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cde_homepage_summaryA

Get a summary of the FBI Crime Data Explorer (CDE) homepage.

Returns the CDE mission statement, navigation structure, data freshness (last refresh dates), available data date ranges, and the full national crime trends response (percent changes across 10 crime types, matching the trends section displayed on the CDE homepage). Provides orientation on what the CDE offers and how current its data is.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description takes full burden. It clearly states the tool returns a summary including specific elements, which is appropriate for a read-only operation. No side effects or limitations are disclosed, but the description is transparent about what the tool provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each adding value: first states purpose, second lists contents, third explains crime trends detail, fourth provides overall orientation. It is front-loaded and concise with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description does not need to detail the output format. It covers the key aspects of what the summary includes, making it complete for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema coverage is 100%. The description adds no parameter info because none are needed, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a summary of the FBI Crime Data Explorer (CDE) homepage' and lists specific contents (mission statement, navigation, data freshness, date ranges, crime trends), which distinguishes it from sibling tools like get_crime_trends or get_summarized_crime_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. While the purpose implies it is for an overview, there is no direct comparison or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_expanded_homicide_dataA

Get Supplementary Homicide Report (SHR) data with expanded details on homicides including victim/offender demographics, weapons, and circumstances.

Args: level: Geographic level — "national", "state", or "agency" data_type: "counts" for time series or "totals" for demographic/detail breakdowns from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity). Only applies when data_type is "counts".

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
to_dateYes
aggregateNoyearly
data_typeYes
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full behavior burden. It details data types (counts/totals), aggregation (yearly/monthly), date formats, and conditional parameter requirements. It does not explicitly state read-only or safety, but behavior is clear and non-destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: one introductory sentence followed by a structured Args list. Each parameter explanation is brief yet complete. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no annotations, and an output schema (not shown), the description covers all needed context: parameter semantics, conditional requirements, and data scope. No gaps for the agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description's Args section provides thorough explanations for each of the 7 parameters, including required conditions, defaults, and formats (e.g., 'mm-yyyy' for dates, 'state' requirement). Fully compensates for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get Supplementary Homicide Report (SHR) data with expanded details on homicides including victim/offender demographics, weapons, and circumstances.' This is a specific verb+resource and differentiates from sibling tools like get_hate_crime_data or get_summarized_crime_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explains parameter requirements (e.g., state required for level='state') and data_type options (counts vs totals). However, it does not explicitly state when to use this tool versus siblings, though context implies it for homicide-specific data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_expanded_property_dataA

Get expanded property crime data with details on stolen/recovered property values.

Args: offense: Property offense code — "NB" (Burglary), "NL" (Larceny), "NMVT" (Motor Vehicle Theft), "NROB" (Robbery). level: Geographic level — "national", "state", or "agency" data_type: "counts" for time series or "totals" for property value breakdowns from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity). Only applies when data_type is "counts".

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
offenseYes
to_dateYes
aggregateNoyearly
data_typeYes
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains parameter dependencies, defaults, and the condition on aggregate. It does not disclose rate limits, idempotency, or data freshness, but the behavioral details are adequate for a data retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear headings and bullet points, but it is somewhat lengthy. Every sentence adds value; however, it could be slightly more concise without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, 5 required, no enums, and presence of output schema, the description covers all necessary details: parameter explanations, dependencies, and return type hints (counts vs totals). It is complete for the tool's functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates fully. It provides detailed explanations for all 8 parameters, including format examples (e.g., '01-2020'), allowed values (offense codes), and conditional requirements (state, ori). This adds significant value beyond the schema's type definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets expanded property crime data with stolen/recovered property values, using specific verbs and resources. It distinguishes from siblings like get_expanded_homicide_data by focusing on property crime.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when parameters are required (e.g., state for level 'state', ori for 'agency') and includes a note about aggregate only applying to data_type 'counts'. It does not explicitly state when to use this tool versus alternatives, but the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hate_crime_dataA

Get hate crime statistics, optionally filtered by bias motivation. Returns incident counts, victim types, offense types, offender demographics, and locations.

Args: level: Geographic level — "national", "state", or "agency" from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") bias: Bias code to filter by (e.g., "12" for Anti-Black, "21" for Anti-Jewish, "24" for Anti-Islamic). Use get_reference_data with offense_type="hate-crime" for full list. If omitted, returns all biases. data_type: "counts" for time series or "totals" for aggregate data (default: "counts") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity). Only applies when data_type is "counts".

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
biasNo
levelYes
stateNo
to_dateYes
aggregateNoyearly
data_typeNocounts
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It discloses conditional parameter dependencies (e.g., state required when level is 'state') and explains default behaviors (aggregate='yearly', data_type='counts'). However, it does not mention read-only status, rate limits, authentication requirements, or any side effects, which are important for an agent to use safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured as a docstring with a brief overview followed by a clean parameter list. Each sentence serves a purpose, though the parameter list could be slightly streamlined. Overall, it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, 3 required) and the presence of an output schema, the description covers parameter semantics thoroughly. It lacks only a sample usage or mention of error conditions, but remains complete enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It explains every parameter: format (mm-yyyy for dates), allowed values (e.g., 'national','state','agency' for level), defaults, and conditional requirements. It even references another tool for bias code lookup, adding significant value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves hate crime statistics with optional bias filtering, and lists the types of data returned (incident counts, victim types, etc.). It distinguishes itself from sibling tools by focusing specifically on hate crime data, which is unique among the listed siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed guidance on parameter usage, such as conditional requirements for state and ori depending on level, and the difference between data_type and aggregate options. However, it does not explicitly compare this tool to alternatives like get_arrest_data or get_nibrs_data, leaving the agent to infer when to use this over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leoka_dataB

Get LEOKA data on law enforcement officers killed and assaulted, including weapons used, circumstances, officer demographics, and offender demographics.

Args: report_type: "monthly" for a specific month or "ytd" for year-to-date summary year: Year for the data (e.g., 2022) month: Month number 1-12 (January=1, December=12). Required when report_type is "monthly".

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthNo
report_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses data content but omits behavioral traits like authentication, rate limits, or side effects. Adequate for a read-only retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with a brief overview and structured parameter list. Front-loaded with key information, no redundant sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists but isn't shown; description mentions data categories but not structure or field names. Complete enough for basic use but could detail return format given 3 parameters and no output schema in description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates well. Explains each parameter clearly: report_type values, year, month dependency on report_type. Adds meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves LEOKA data on law enforcement officers killed and assaulted, specifying the resource and verbs. It distinguishes from siblings by focusing on a specific dataset, though it could explicitly differentiate from similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives or prerequisites. The description explains parameters but lacks context on when to choose this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lesdc_dataA

Get law enforcement suicide data with breakdowns by demographics, race, location, duty status, and more.

Args: year: Year for the data (e.g., 2022) chart_type: Chart/breakdown type. Use get_reference_data or see error message for valid values.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
chart_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that invalid chart_type will result in an error, but omits other behavioral traits like data freshness, read-only nature, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first clearly states purpose, second covers parameters. No wasted words; front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description provides basic purpose and parameter meanings, but lacks context about data coverage (e.g., year range, source) and output format. However, an output schema exists, reducing the need to describe return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description adds value by explaining year as 'Year for the data (e.g., 2022)' and chart_type as 'Chart/breakdown type' with hint to use get_reference_data. It compensates well for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves law enforcement suicide data with breakdowns by specific categories (demographics, race, location, duty status). This distinguishes it from siblings like get_leoka_data (assaults/killings) and get_use_of_force_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It does mention using get_reference_data for valid chart_type values, but no when-not or comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nibrs_dataA

Get NIBRS incident-based crime data for 70+ offense types.

Args: offense: NIBRS offense code (e.g., "13A" for aggravated assault, "09A" for murder, "11A" for rape, "120" for robbery, "220" for burglary). Use get_reference_data for full list. level: Geographic level — "national", "state", or "agency" from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") data_type: "counts" for time series data or "totals" for aggregate breakdowns (default: "counts") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity). Only applies when data_type is "counts".

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
offenseYes
to_dateYes
aggregateNoyearly
data_typeNocounts
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It describes the data retrieval operation but does not explicitly state side effects, permissions, or read-only nature. The description implies a safe read operation but lacks explicit behavioral disclosure beyond data format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose and Args section. While it is somewhat lengthy, every sentence provides value. Minor fluff could be trimmed, but overall it is effective and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (context signals indicate 'Has output schema: true'), the description focuses on input parameters and usage. It covers all 8 parameters, required vs optional, defaults, and links to reference data, making it 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so thoroughly by explaining each parameter with examples, default values, conditional requirements, and data format constraints. This adds significant meaning beyond the schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get NIBRS incident-based crime data for 70+ offense types.' It uses a specific verb and resource, and distinguishes from sibling tools like get_arrest_data and get_hate_crime_data by focusing on NIBRS data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed parameter guidance, including examples for offense codes and conditional requirements for level. It also references get_reference_data for a full offense list. However, it does not explicitly compare when to use this tool versus similar siblings like get_crime_trends or get_summarized_crime_data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nibrs_estimationA

Get NIBRS national crime estimates derived from incident data. Supports breakdowns by state, region, agency type, and population size.

Args: offense: NIBRS offense code (e.g., "13A", "09A"). Use get_nibrs_data docs for codes. level: "national", "state", "region", "agency-type", or "size" year: Year for estimation data state: Two-letter state abbreviation (required when level is "state") region: Region code — "M" (Midwest), "N" (Northeast), "S" (South), "W" (West). Required when level is "region". agency_type: "S" (Size) or "T" (Agency Type). Required when level is "agency-type" or "size". agency_type_location: "C" (City) or "N" (County). Required when level is "agency-type". size_group: Size group "1"-"8" (1=Cities 250K+, 6=Cities under 10K, 7=MSA Counties, 8=Non-MSA Counties). Required when level is "size".

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
levelYes
stateNo
regionNo
offenseYes
size_groupNo
agency_typeNo
agency_type_locationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral transparency. The description does not disclose whether the operation is read-only, whether it requires special permissions, if there are rate limits, or any side effects. It focuses solely on parameter definitions, missing key behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a brief overview followed by an 'Args' section. Each parameter gets a clear, concise explanation. The length is justified by the complexity (8 parameters with conditions). No superfluous sentences, though the external reference to 'get_nibrs_data docs' could be integrated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (context signal: has output schema = true), the description need not cover return values. It thoroughly documents all 8 input parameters with constraints and defaults. The description is complete for the tool's complexity, covering all necessary input guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, meaning the description must fully explain parameters. It does so exceptionally: provides examples for offense codes, lists exact level options, and clarifies conditional requirements (e.g., state, region, agency_type). This adds substantial value beyond the schema's bare property definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves NIBRS national crime estimates with breakdowns. It specifies the verb 'Get' and the resource 'NIBRS national crime estimates'. While it doesn't explicitly distinguish from sibling tools like get_nibrs_data, the context of 'estimates derived from incident data' implies an aggregated view, setting it apart from raw data retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed parameter conditions (e.g., state required when level='state'), which guides usage. However, it does not explicitly state when to use this tool versus alternatives like get_crime_trends or get_nibrs_data, nor does it mention when not to use it. The guidance is implicit through parameter requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_police_employmentA

Get law enforcement employee data including officer/civilian counts by gender, rates per 1,000 population.

Args: level: Geographic level — "national", "state", "agency", or "region" from_year: Start year in yyyy format (e.g., "2015") to_year: End year in yyyy format (e.g., "2022") state: Two-letter state abbreviation (required for "state" and "agency" levels) ori: Agency ORI code (required for "agency" level) region: Region name — "midwest", "south", "northeast", or "west" (required for "region" level)

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
regionNo
to_yearYes
from_yearYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description conveys the nature of the data returned (counts by gender, rates) and implies a read-only operation via 'get'. It does not mention permissions or rate limits, but the behavioral scope is well-covered for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a one-sentence summary followed by a clear Args list. No wasted words, and information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the parameter count (6) and the existence of an output schema, the description fully covers the input parameters' semantics. No additional context is needed for a read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully by explaining each parameter's meaning, format (e.g., yyyy), and required context (e.g., state for 'agency' level). This adds significant value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves law enforcement employee data, specifying officer/civilian counts by gender and rates per 1,000 population. This verb+resource is distinct from sibling tools (e.g., crime, arrest data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for employment data but does not explicitly state when to use this tool versus alternatives or when not to use it. There is no guidance on exclusions or context for selecting this over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reference_dataA

Get reference data: state lists, offense/bias code lookups, data properties, or data refresh dates.

Args: data_type: Type of reference data — "states" (list of states/territories), "offenses" (offense or bias code lookup), "cde_properties" (data date ranges), or "refresh_date" (last data refresh dates) offense_type: Required when data_type is "offenses" — "arrest" for arrest offense codes or "hate-crime" for hate crime bias codes

ParametersJSON Schema
NameRequiredDescriptionDefault
data_typeYes
offense_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It implies a read-only retrieval but does not explicitly state side effects, permissions, or response behavior beyond listing what each data_type returns. Adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then structured parameter details. Slightly verbose due to formal Args format, but every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all data types and parameter conditions. Output schema exists, so return value details are not needed. Could mention that offense_type is ignored for non-offenses, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description fully explains both parameters: data_type with four enumerated values and offense_type with conditional requirement. Adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves reference data (state lists, offense/bias code lookups, data properties, refresh dates). The verb 'Get' and specific resource types distinguish it from sibling tools that focus on crime statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on data_type options and conditionally required offense_type. However, no explicit comparison to siblings or when-not-to-use advice, though context makes it clear this is for reference data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summarized_crime_dataA

Get summarized (SRS) crime data including offense rates, actuals, clearances, and population coverage.

Args: offense: SRS offense code (e.g., "V" for Violent Crime, "P" for Property Crime, "HOM", "RPE", "ROB", "ASS", "BUR", "LAR", "MVT", "ARS"). Use get_reference_data for full list. level: Geographic level — "national", "state", or "agency" from_date: Start date in mm-yyyy format (e.g., "01-2020") to_date: End date in mm-yyyy format (e.g., "12-2022") state: Two-letter state abbreviation (required when level is "state") ori: Agency ORI code (required when level is "agency") aggregate: Aggregation level — "yearly" (default, sums monthly into yearly) or "monthly" (monthly granularity)

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
levelYes
stateNo
offenseYes
to_dateYes
aggregateNoyearly
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the data content and default behavior (aggregate defaults to 'yearly'), but with no annotations, the description carries full burden. It does not disclose potential side effects, authentication needs, rate limits, or whether the operation is read-only, though it is implicitly a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured with a clear opening line and an Args list. Each sentence is informative and earned. Could be slightly more concise, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters (4 required), no annotations, and an output schema, the description covers all parameter semantics, required conditions, and provides examples. It is sufficiently complete for an agent to invoke the tool correctly, with no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds extensive value by explaining each parameter's meaning, allowed values (e.g., offense codes, level options), required conditions (state for 'state' level, ORI for 'agency' level), and date format. This fully compensates for the schema's lack of descriptive metadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it gets summarized SRS crime data including specific metrics (offense rates, actuals, clearances, population coverage). The verb 'get' and resource 'summarized crime data' are specific, but it does not explicitly distinguish from sibling tools like get_crime_trends or get_nibrs_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides detailed parameter guidance (e.g., state required for 'state' level, ORI for 'agency' level, date format examples) but does not explicitly state when to use this tool versus alternatives, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_use_of_force_dataA

Get use of force data from law enforcement agencies. Covers incidents resulting in death, serious bodily injury, or firearm discharge.

Args: report_type: "summary" for participation/submission data, "questions" for detailed question data, "reports" for report data year: Year for the data. Required for "summary" and "questions" types. location: "national" or a two-letter state abbreviation. Required for "summary" type. group: Group identifier for "questions" or "reports" types. quarter: Quarter (1-4) for "questions" type. spec: Report specification for "reports" type.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNo
yearNo
groupNo
quarterNo
locationNo
report_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the data scope and parameter dependencies (e.g., year required for summary). However, it does not mention read-only nature, rate limits, or data source details. The behavioral traits are partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, starting with a clear purpose statement, followed by a structured Args list. Every sentence adds value, and there is no redundancy. The front-loaded summary aids quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, 1 required, and an output schema present, the description covers all parameters' roles and some constraints. However, it lacks guidance on valid parameter combinations and error conditions. The presence of an output schema reduces the burden for return value documentation, but additional context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the tool description explains each parameter's meaning and constraints (e.g., location: 'national or two-letter state abbreviation'). This adds significant value beyond the schema's type definitions. However, some format details (e.g., year range) are missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get use of force data from law enforcement agencies' and specifies the scope: incidents resulting in death, serious bodily injury, or firearm discharge. This distinguishes it from sibling tools like get_arrest_data, which focus on different data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains parameter requirements (e.g., which params are required for each report_type) but does not provide explicit guidance on when to use this tool vs. siblings. No 'when to use' or 'alternatives' section is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_agencyA

Look up law enforcement agencies by state, ORI code, or judicial district code.

Args: lookup_type: How to look up — "by_state" (list agencies in a state), "by_ori" (specific agency by ORI), or "by_district" (agencies by judicial district code) state: Two-letter state abbreviation (required for by_state and by_ori) ori: Agency ORI identifier (required for by_ori) district_code: Judicial district code (required for by_district) name_filter: Optional substring to filter results by agency name (case-insensitive). Only applies to by_state and by_district lookups. offset: Number of results to skip (for pagination). Applied after name_filter. limit: Maximum number of results to return (for pagination). Applied after name_filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
oriNo
limitNo
stateNo
offsetNo
lookup_typeYes
name_filterNo
district_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully carries the burden. It explains the behavior for each lookup type, pagination (offset, limit order), and name_filter application. It does not cover error handling or rate limits, but the core behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear Args section and front-loaded purpose. It is thorough but not overly verbose; every sentence adds value. Minor redundancy (e.g., repeating 'required for' multiple times) could be trimmed, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters and an output schema present, the description covers all parameter relationships, pagination order, and usage details. It does not need to explain return values since the output schema exists. The description is fully complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, meaning the properties have no descriptions. The tool's description fully compensates by explaining each parameter's purpose, requirements, and constraints (e.g., required for certain lookup_type). This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to look up law enforcement agencies by state, ORI code, or judicial district code. It distinguishes itself from sibling tools, which focus on crime data, by being the sole agency lookup tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies three lookup types and their required parameters, guiding when to use each. It does not explicitly mention when not to use this tool or alternatives, but sibling tools are distinctly different, so the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_cacheA

Manage the FBI Crime Data response cache.

Args: action: "status" (show cache stats), "clear" (wipe entire cache), or "clear_expired" (remove only expired entries)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that 'clear' wipes the entire cache, which is a significant destructive behavior. No annotations are provided, so the description carries the transparency burden. It lacks details on auth requirements, rate limits, or what cache stats include.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, with a clear opening statement and a structured args list. Every sentence adds value, and there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, clear actions) and the presence of an output schema (so return values are handled externally), the description is complete. It covers what each action does, which is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully explains the single 'action' parameter by enumerating the three possible values ('status', 'clear', 'clear_expired') and describing what each does. This adds essential meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Manage' with the resource 'FBI Crime Data response cache', and lists three distinct actions (status, clear, clear_expired). It clearly distinguishes from sibling tools which are all data retrieval or lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for cache management via the actions listed, but does not explicitly state when to use or exclude alternatives. However, the context of sibling tools makes the differentiation clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_spilloverA

Read a spillover file that was saved when a tool response exceeded the size limit.

Use this to retrieve data beyond the preview shown in a truncated response. The filename is provided in the spillover notice (e.g., "get_nibrs_data_a1b2c3d4.json").

Args: filename: Name of the spillover file (e.g., "get_nibrs_data_a1b2c3d4.json"). Use "list" to see all available spillover files. offset: Character position to start reading from (default: 0). limit: Maximum number of characters to return (default: 50000, max: 100000).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that the tool reads spillover files, explains the 'list' special value, and details offset/limit behavior. It is transparent about defaults and limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a short purpose statement, a usage hint, then parameter descriptions. Every sentence adds value, and it is front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no annotations, and an existing output schema, the description covers all necessary aspects: what the tool does, when to use it, and detailed parameter semantics. It is fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add meaning. It explains filename with an example and the 'list' option, offset as character position with default 0, and limit with default and maximum. This goes well beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads spillover files saved when tool responses exceed size limits. It distinguishes from sibling tools that retrieve specific data categories, making its unique purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool when a truncated response provides a spillover notice, and mentions the filename is from that notice. It does not discuss when not to use it or offer direct alternatives, but the context is sufficient.

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. Dates show when Glama detected each change.

  1. 17 tool updatesv0.4.0
    • First observedget_arrest_data
    • First observedget_cde_homepage_summary
    • First observedget_crime_trends
    • First observedget_expanded_homicide_data
    • First observedget_expanded_property_data
    • First observedget_hate_crime_data
    • First observedget_leoka_data
    • First observedget_lesdc_data
    • First observedget_nibrs_data
    • First observedget_nibrs_estimation
    • First observedget_police_employment
    • First observedget_reference_data
    • First observedget_summarized_crime_data
    • First observedget_use_of_force_data
    • First observedlookup_agency
    • First observedmanage_cache
    • First observedread_spillover

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct type of crime data or administrative function (e.g., arrests, hate crimes, use of force, cache management). The descriptions clearly differentiate overlapping data types like get_arrest_data vs get_summarized_crime_data, eliminating ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using lowercase and underscores (e.g., get_arrest_data, get_hate_crime_data, lookup_agency). The few exceptions like manage_cache and read_spillover still follow the verb_noun pattern, maintaining overall consistency.

Tool Count4/5

With 17 tools, the set is slightly above the typical 3-15 range but is well-justified by the breadth of FBI crime data covered (arrests, NIBRS, hate crimes, LEOKA, etc.). Each tool serves a clear purpose; no redundancy is apparent.

Completeness5/5

The tool set covers major FBI crime data programs (SRS, NIBRS, hate crime, LEOKA, police employment, use of force) and includes essential support tools (reference data, agency lookup, cache management, spillover handling). There are no obvious gaps for the stated domain.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides access to the police.uk API with 21 tools to query UK crime data, police forces, neighbourhoods, and stop-and-search incidents. Enables retrieval of street-level crimes, force details, neighbourhood teams, and policing priorities across England, Wales, and Northern Ireland.
    21
    20
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Wraps the UK Police Data API to enable querying crime data, police forces, and other UK police information through natural language.
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dathere/fbi-crime-data-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server