Skip to main content
Glama

Server Details

Entity-resolved NIH grant corpus (FY1985-2026) via 14 read-only, provenance-carrying MCP tools.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 14 tools

Disambiguation4/5

Most tools target distinct axes: search/search_grants (citation-shaped vs filtered primary), fetch, profiles, rankings, trends, and distribution tools. A few pairs require careful reading to separate — funding_trend (levels) vs funding_growth (rate), activity_code_distribution (system/IC mechanism mix) vs mechanism_mix (institution portfolio), and search vs search_grants are near-siblings. Descriptions do a good job stating scope and mutual exclusions (e.g. 'per-institution portfolios are served by the institution-profile surface'), which keeps misselection low.

Naming Consistency4/5

Predominantly descriptive snake_case noun/verb phrases (funding_trend, rank_institutions, topic_trend, source_status) with a consistent style. Minor deviation: only the two profile tools use a get_ verb prefix, while fetch and search are bare verbs mixed with noun-phrase names. Still readable and predictable overall.

Tool Count5/5

14 tools is well within the healthy 3-15 range and each maps to a distinct analytical question (search, fetch, entity profiles, trends, growth, rankings, concentration, mechanism/topic distributions, status). No obvious filler or redundant entries.

Completeness4/5

Strong lifecycle coverage: search, single-record fetch, institution/PI profiles, time trends, growth, rankings, concentration, topic/mechanism distributions, and corpus status. Minor gaps exist — no bulk export or explicit institution listing/lookup surface (users must derive entity_id from the ranking), and no update/write ops (appropriate for a read-only corpus). These are workable around rather than blocking.

Available Tools

14 tools
activity_code_distributionNIH mechanism class distributionA
Read-onlyIdempotent
Inspect

Use this tool when the user asks what KINDS of awards NIH (or one Institute) makes — 'how much goes to R01s vs training grants', 'what share of NCI's portfolio is centers', 'break NIH down by mechanism'. Returns counts and recorded totals per mechanism class (research / career / training / center / contract / intramural / ...) from ranking_core.classify. Scope is whole-NIH or one Institute; per-institution portfolios are served by the institution-profile surface instead. Bounds: fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end; ic is a free-text filter with no length cap. Not paginated.

NameRequiredDescriptionDefault
icNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world). The description adds real behavior: no pagination, fiscal-year bounds 1985-2100 with start<=end, and that ic is free-text with no length cap. It doesn't state response shape, but an output schema exists so that burden is lower.

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 the trigger phrase and examples, then scope, then bounds. Slightly dense with quoted user examples and a trailing bounds list, but every sentence carries information an agent needs.

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 trigger, scope, alternative routing, temporal bounds, and pagination behavior; the output schema handles return values. The main gap is not specifying valid ic values, which matters given 0% schema coverage and free-text input.

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

Parameters3/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 partially: it explains fiscal_year_start/end constraints and notes ic is a free-text Institute filter with no length cap. It does not, however, explain what values ic accepts (e.g., IC abbreviation vs. full name) or the null-default semantics, leaving real ambiguity for a 0%-coverage 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?

Specific verb+resource: returns counts and totals per NIH mechanism class from ranking_core.classify. The title and description together make the scope (whole-NIH or one Institute) unmistakable, and it names the sibling surface (institution-profile) that handles the other scope.

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

Usage Guidelines5/5

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

Opens with explicit 'Use this tool when...' plus three concrete user phrasings, then names an alternative surface and the condition that selects it ('per-institution portfolios are served by the institution-profile surface instead'). Both when-to-use and when-not are present.

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

fetchFetch one NIH grant (citation record)A
Read-onlyIdempotent
Inspect

Use this tool to retrieve the full record for one NIH grant by its id. Returns {id, title, text, url, metadata} with url set to the public OpenNIH grant page so the client can cite it. This is the citation-record wrapper resolving the canonical row for an id. The record is PROJECT-level, not project-year: when a project number owns several project-year rows the LATEST fiscal year is returned (metadata.matching_rows reports how many rows exist). Bounds: id is REQUIRED and must be a full NIH project number matching ^[A-Z0-9-]{1,24}$ (e.g. 1R01CA123456-01A1); core project numbers and partial numbers do not match. An id that matches no row in the corpus raises an error — a missing grant can also mean it was added to RePORTER after the snapshot cutoff, so it is absent here rather than nonexistent.

NameRequiredDescriptionDefault
idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent, and the description adds real behavioral context beyond them: PROJECT-level resolution returning the LATEST fiscal year with metadata.matching_rows, plus error behavior for unmatched ids and the snapshot-cutoff caveat for 'missing' grants. That is exactly the kind of context annotations cannot carry.

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 and return shape, then constraints and edge cases in priority order. It is dense but nearly every sentence carries unique information; the final snapshot-cutoff sentence is slightly over-explained.

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?

Even though an output schema exists, the description still previews the response fields and URL purpose, and covers the level-of-aggregation subtlety and failure mode. Nothing an agent needs to call it correctly is missing.

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% and the sole parameter is undocumented in the schema, so the description carries the full burden — and does: required, full NIH project number format, regex ^[A-Z0-9-]{1,24}$, a concrete example (1R01CA123456-01A1), and the explicit exclusion of core/partial numbers.

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?

States a specific verb and resource ('retrieve the full record for one NIH grant by its id') and discloses the return shape ({id, title, text, url, metadata}). It clearly separates itself from the list/search siblings by being a single-record citation wrapper.

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?

Implies the condition of use (you already hold a full NIH project number) and warns that core project numbers and partial numbers do not match. It does not explicitly name which sibling to use instead when you don't have an id, so it stops short of full when/when-not routing.

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

funding_growthNIH funding growth rateA
Read-onlyIdempotent
Inspect

Use this tool when the user asks about the RATE of change rather than the level — 'is this university's NIH funding growing', 'what's the CAGR since 2015', 'who grew fastest'. Returns year-over-year growth plus a window CAGR for one institution (entity_id, the canonical institution identifier) or all NIH. Both yoy_growth_pct and cagr_pct are PERCENTS (2.5905 means 2.5905%/yr, not 259%); the old fractional cagr key is gone. NULL awards are excluded, never padded to $0. meta echoes entity_id + organization so looped calls stay attributable. Bounds: fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end; entity_id is matched exactly with no length cap. Not paginated.

NameRequiredDescriptionDefault
entity_idNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare the safe read-only, idempotent, non-destructive profile, and the description goes well beyond them: percent-vs-fraction semantics, removal of the old `cagr` key, NULL awards excluded rather than zero-padded, meta echo for looped calls, and no pagination.

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-loads the when-to-use condition and then packs scope, semantics, and bounds into tight clauses with no filler. It is long and dense, but each sentence carries distinct operational 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?

An output schema exists, so return structure need not be documented, yet the description still clarifies the units of yoy_growth_pct and cagr_pct. Combined with entity scoping, date bounds, NULL handling, and pagination status, an agent has everything needed to call it correctly.

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 the description must carry the burden and largely does: entity_id is defined as the canonical institution identifier matched exactly with no length cap, and fiscal years are bounded 1985-2100 with fiscal_year_start <= fiscal_year_end. It adds real meaning beyond the bare integer/string 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?

States a specific verb+resource: growth RATE of NIH funding for an institution or all NIH. Explicitly distinguishes rate-of-change from level-of-funding, which is exactly the axis separating it from the funding_trend sibling.

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?

Gives concrete triggering questions ('is this university's NIH funding growing', 'what's the CAGR since 2015', 'who grew fastest') and the rate-vs-level condition. It implies the alternative (a level/trend tool) but never names funding_trend or another sibling explicitly.

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

funding_trendNIH funding trend by yearA
Read-onlyIdempotent
Inspect

Use this tool to get yearly NIH funding totals and grant counts. Returns a time series for the whole NIH, one Institute/Center, one activity code, or one institution. Use it when the user asks 'how much NIH funding was awarded in FY2020', 'how has NIH's budget changed over time', or 'plot R01 dollars by year'. total_funding spans ALL NIH mechanisms (funding_scope="all_mechanisms") and is therefore 1.5-1.7x larger than research-only ranking totals for the same slice, so the two are not comparable. Rows flag the partial current fiscal year. Bounds: fiscal years 1985-2100 and fiscal_year_start <= fiscal_year_end; ic, activity_code and institution are free-text filters with no length cap (matched as parameterized SQL, never interpolated). Not paginated: the whole requested year range is returned.

NameRequiredDescriptionDefault
icNo
institutionNo
activity_codeNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's value is in the extra behavior it discloses: FY bounds 1985-2100, fiscal_year_start <= fiscal_year_end, no pagination, partial-current-year row flags, and the 1.5-1.7x magnitude gap versus ranking totals. What it omits is edge behavior for out-of-range or empty results, keeping it short of a 5.

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 and triggers, then scope caveats, then constraints — a sensible order with no filler sentences. It is dense and runs long, particularly the SQL-injection aside, but each clause carries usable 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?

An output schema exists, so return-shape explanation is unnecessary; the description instead supplies everything an agent needs to call this correctly — valid filter dimensions, year bounds, non-pagination, and the comparability caveat. Nothing material is missing.

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 description coverage is 0%, so the description must carry parameter meaning, and it does: ic, activity_code and institution are named as free-text filters, and the numeric bounds plus start<=end constraint on the fiscal year params are spelled out. It doesn't state the default behavior when all filters are omitted beyond the implicit 'whole NIH' scope.

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?

States a specific verb and resource (yearly NIH funding totals and grant counts) plus the exact slice granularity (whole NIH, one IC, one activity code, one institution). An agent can distinguish this from funding_growth or topic_trend without opening either schema.

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

Usage Guidelines5/5

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

Provides concrete trigger questions ('how much NIH funding was awarded in FY2020', 'plot R01 dollars by year') that map directly onto the tool's slice parameters. It also warns that total_funding is not comparable to research-only ranking totals, which steers the agent away from misuse against ranking siblings.

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

get_institution_profileGet NIH institution profileA
Read-onlyIdempotent
Inspect

Use this tool when the user asks about one named institution — 'what is Harvard's NIH funding history', 'which PIs does this university fund', 'what mechanisms does it win'. entity_id is the canonical institution identifier (from the institution ranking); grant-search results do NOT carry one. Read-only institution profile: funding history, mechanism mix, top PIs. fiscal_year_start/fiscal_year_end scope EVERY aggregate section — the mechanism-mix, funding-trend AND top-PIs sections all report only that fiscal-year window, and provenance.fiscal_year_window echoes the window actually applied; omit both arguments for all fiscal years. meta.found and profile.organization are deliberately window-independent (they answer existence/identity, so a real entity with no funding in the window stays found with its name). meta.found is always an explicit boolean: false (with profile=null) when the entity_id matches nothing in the corpus, true otherwise — branch on it instead of null-checking funding fields. The funding-trend rows' fiscal_year is int OR null: null means 'fiscal year not reported', never 0, and such a group belongs to no fiscal-year window, so it is absent from every scoped section. Bounds: entity_id 2-256 characters, fiscal years 1985-2100.

NameRequiredDescriptionDefault
entity_idYes
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover readOnly, idempotent, non-destructive and closed-world, yet the description adds substantial non-obvious behavior: fiscal-year scoping applies to every aggregate section, provenance.fiscal_year_window echoes the applied window, meta.found is an explicit boolean with profile=null on miss, and meta.found/profile.organization are deliberately window-independent. It also discloses the null fiscal_year semantics (never 0, belongs to no window), which is genuine behavioral disclosure not present in structured fields.

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?

Usage guidance is front-loaded before the data-shape details, and nearly every sentence carries unique semantics. It is dense and long, with some near-overlap between the window-independence sentence and the meta.found boolean sentence, so it is efficient but not maximally tight.

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?

For a single-entity lookup with an output schema, the description supplies everything an agent needs beyond the schema: identifier provenance, scoping rules, miss handling, and null-year edge cases. No material gap remains even though return values are formally covered by the output schema.

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 carries the full burden and does so: entity_id is defined as the canonical institution identifier with its source and a 2-256 character bound, and fiscal_year_start/end are explained as scoping EVERY aggregate section (mechanism-mix, funding-trend, top-PIs) with omit-both meaning all years and a 1985-2100 bound. This far exceeds the schema's bare titles and defaults.

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 names a specific verb and resource ('Read-only institution profile: funding history, mechanism mix, top PIs') plus a concrete triggering intent ('the user asks about one named institution'). It is instantly separable from get_pi_profile, rank_institutions, and search_grants, since it is explicitly scoped to one institution's NIH profile.

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?

It gives explicit trigger context with quoted example queries and tells the agent where entity_id comes from ('from the institution ranking') while warning that grant-search results do NOT carry one — effectively routing between siblings. It stops short of naming the reciprocal tools (rank_institutions, search_grants, get_pi_profile) as in-when/when-not alternatives.

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

get_pi_profileGet NIH PI profileA
Read-onlyIdempotent
Inspect

Use this tool when the user asks about one researcher — 'how much NIH funding does Dr. X have', 'list this PI's grants', 'who does she collaborate with'. profile_id is the NIH RePORTER PI identifier carried in grant-search results' pi_profile_id field and is not guessable. Read-only PI profile: grants, collaborators, publications, funding totals; the headline name/institution follow the PI's LATEST grant. A fiscal-year window with no grants returns the profile with total_grants=0, not an error. COUNT SEMANTICS (#762): profile.grant_count counts project-year rows (one per fiscal year a grant was funded), while profile.active_grants counts DISTINCT active awards — core project numbers — whose rows are active, so a continuing award counted across several fiscal years in grant_count counts ONCE in active_grants. fiscal_year_start/fiscal_year_end scope EVERY aggregate section — grants, profile totals AND collaborators all report only that window (issue #342; collaborators previously ignored it and returned the all-time list). COLLABORATOR COVERAGE: the collaborator sidecar covers only SOME fiscal years, so an empty collaborators list can mean 'unknown for these years' rather than 'none'. meta.collaborator_coverage.window_covered distinguishes the two: false = no data for any year in the window, and true with window_fully_covered=false means PARTIAL coverage, with the uncovered years listed in missing_fiscal_years_in_window. fiscal_years_with_collaborator_data lists the years that do have it. PI ROLE (#761): each grant carries pi_role — contact (this person is the row's contact PI) or co_investigator (matched via the corpus multi-PI list, so awards someone else leads still count toward totals); meta.multi_pi_ids_loaded=false means the corpus predates that list and only contact-PI rows can match, and meta.present_only_as_non_contact_pi=true means the id is never a contact PI anywhere (headline name/institution are then empty). SUBPROJECT ROWS (#761): award_amount NULL with subproject_component=true marks a component row of a multi-project award whose dollars are carried by another row of the same project and fiscal year — subproject_note names that amount; NULL WITHOUT the flag means not reported. Bounds: profile_id 1-20 digits (^[0-9]{1,20}$), fiscal years 1985-2100, limit 1-50 (default 20), offset 0-100000.

NameRequiredDescriptionDefault
limitNo
offsetNo
profile_idYes
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral context beyond them: count semantics for grant_count vs active_grants, collaborator coverage gaps, PI-role matching limits, and subproject NULL meaning. Slightly reduced only because it leans heavily on issue-numbered jargon that an agent must decode.

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 the usage trigger, then organized into clearly labeled sections (COUNT SEMANTICS, COLLABORATOR COVERAGE, PI ROLE, SUBPROJECT ROWS, Bounds), so it stays navigable despite its length. Some density comes from issue references (#762, #761, #342) that add noise rather than actionable guidance.

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 an output schema exists and safety is covered by annotations, the description supplies the semantic caveats needed to interpret results: aggregate scoping, collaborator coverage flags, PI-role flags, and subproject NULL handling. Only minor gaps remain, such as explaining what limit/offset paginate over.

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 compensates fully: profile_id is explained as the NIH RePORTER identifier carried in pi_profile_id, not guessable, with a digit regex; fiscal year parameters are shown to scope every aggregate section; and limit/offset bounds and defaults are stated.

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?

States a concrete verb+resource ('Read-only PI profile: grants, collaborators, publications, funding totals') and immediately conveys the object is one researcher, with distinguishing detail that the headline name/institution follow the latest grant. An agent can distinguish it from institution-level siblings like get_institution_profile.

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?

Opens with an explicit trigger ('when the user asks about one researcher') plus example utterances, explains where profile_id comes from, and clarifies that an empty fiscal-year window is not an error. It does not explicitly name a competing sibling tool to route away from, so it falls short of a full when/when-not/alternatives statement.

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

ic_topic_crossNIH IC x topic cross-tabA
Read-onlyIdempotent
Inspect

Use this tool when the user asks what ONE NIH Institute funds in a topic — 'what is NCI spending on immunotherapy', 'does NIMH fund psychedelics research', 'compare NIAID and NCI on vaccines' (call it once per Institute), or ic='ALL' for every IC at once. The response states which surface produced the numbers in match_strategy: 'rcdc' (official NIH RCDC categories, FY2008+) or 'text' (project_title match, used when the topic is not an RCDC category or the requested window is below the measured 50% RCDC-density minimum; provenance.rcdc_window_coverage reports the actual density). On the RCDC surface each grant is counted once even when several of its categories match. Bounds: ic and query are BOTH REQUIRED, 2-64 characters each; fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end. Not paginated.

NameRequiredDescriptionDefault
icYes
queryYes
match_strategyNoauto
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description adds substantive behavior beyond them: the match_strategy surface ('rcdc' vs 'text'), the measured 50% RCDC-density threshold that forces the text fallback, provenance.rcdc_window_coverage, and the de-duplication rule that each grant is counted once. It also flags that results are not paginated, which the annotations do not convey.

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 trigger condition and examples are front-loaded, followed by the response-surface explanation and then constraints, which is a sensible order. The prose is dense and every sentence carries information, though the parenthetical density explanation could be tightened.

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?

For a two-surface cross-tab tool with an output schema already defining return values, the description supplies everything else an agent needs: required params, character and fiscal-year bounds, the surface-selection rule, provenance semantics, de-duplication, and the no-pagination fact. Nothing material is left to inference.

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 description coverage is 0%, so the description carries the load and does: both ic and query are required at 2-64 characters, fiscal years span 1985-2100 with start <= end, and ic='ALL' is a valid sentinel. match_strategy's 'auto' default and its allowed values are only partly explained (the 'rcdc'/'text' surfaces are described but 'auto' selection logic is not).

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 states a specific verb and resource ('what ONE NIH Institute funds in a topic') with concrete example queries, so an agent immediately knows this is an IC-by-topic cross-tab rather than a trend or search tool. It never names a sibling (topic_trend, funding_trend) to contrast against, which is the only thing keeping it from a 5.

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?

It gives explicit trigger conditions with quoted user phrasings ('what is NCI spending on immunotherapy', 'compare NIAID and NCI on vaccines') and tells the agent to call it once per Institute for comparisons. It also implicitly routes away from itself when a trend is needed, but no alternative tool is named for that case, so there is no true when-not guidance.

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

institution_concentrationNIH institution funding concentrationA
Read-onlyIdempotent
Inspect

Use this tool when the user asks how concentrated or unequal NIH funding is across institutions — 'is NIH money concentrated in a few universities', 'what share do the top 5 take', 'has inequality grown since 2000'. Returns gini, hhi, top5_share and the top-5 institutions over the competitive RPG-research scope (NULL awards excluded, never padded to $0). Bounds: fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end. Optional ic narrows the scope to one NIH institute when it is an IC abbreviation such as NCI or NIGMS. Any other string is matched as a NAME FRAGMENT and can span several institutes; meta.ic_scope.kind reports fragment and how many institutes matched. Omit ic for all-NIH. Not paginated.

NameRequiredDescriptionDefault
icNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses the analysis scope (competitive RPG-research, NULL awards excluded, never padded to $0), fiscal-year bounds (1985-2100, start <= end), non-paginated behavior, and how ambiguous `ic` values are handled with a `meta.ic_scope.kind` report. This is exactly the operational context annotations cannot carry.

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 the use case, then output, scope, bounds, and the `ic` caveat in a logical order; every sentence carries distinct information. It is dense and slightly long, but no sentence is filler.

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?

An output schema exists, yet the description still names the key metrics, and it covers the edge cases an agent would otherwise guess at (null handling, year bounds, fragment matching, no pagination). Nothing needed to invoke or interpret it correctly is missing.

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 carries the full burden and does so: `ic` is explained as either an IC abbreviation (NCI, NIGMS) or a matched name fragment spanning multiple institutes with a reported `fragment` kind, and the two fiscal-year parameters get valid range and ordering constraints. Omission of `ic` meaning all-NIH is also stated.

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?

States a specific resource (NIH funding concentration across institutions) and the exact metrics returned (gini, hhi, top5_share, top-5 institutions), which cleanly separates it from siblings like rank_institutions and funding_trend. An agent can select it without opening any schema.

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?

Opens with an explicit trigger ('Use this tool when the user asks how concentrated or unequal NIH funding is...') and supplies sample user phrasings, giving clear context for selection. It does not explicitly rule out or name alternative siblings (e.g. rank_institutions) for adjacent questions, so it stops short of full when-not guidance.

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

mechanism_mixNIH mechanism mixA
Read-onlyIdempotent
Inspect

Use this tool when the user asks what mix of award types ONE institution wins — 'is this university mostly R01s or centers', 'how much of its NIH money is training', 'compare two schools' portfolios'. entity_id is the canonical institution identifier (from the institution ranking). With entity_id it returns that institution's whole NIH-administered portfolio (all mechanism classes); without it, the system-wide RPG-research breakdown — the two scopes are NOT comparable. Counts are grouped by comparability_group and never summed across classes. Bounds: fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end; entity_id is matched exactly (padded and unpadded DUNS spellings both resolve) with no length cap. Not paginated.

NameRequiredDescriptionDefault
entity_idNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description goes well beyond them: counts are grouped by comparability_group and never summed across classes, entity_id is matched exactly with padded/unpadded DUNS both resolving, there is no length cap, and results are not paginated. These are behavior traits no structured field communicates.

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?

Front-loads the usage trigger, then scopes, then parameter and bound constraints, then pagination — a logical order with no filler. Every clause (non-comparability, grouping rule, DUNS spellings, year bounds) carries operational meaning.

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?

An output schema exists, so return-value description is correctly omitted. Scope definition, the non-comparability warning, exact-match and DUNS behavior, and fiscal-year bounds cover everything an agent needs to invoke this 3-param, all-optional tool correctly.

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 description coverage is 0%, so the description carries the full burden and does much of it: entity_id's origin ('canonical institution identifier from the institution ranking') and matching semantics are defined, and the fiscal-year bounds (1985-2100, start <= end) are given. It does not explain what a null/omitted entity_id or null fiscal years resolve to as defaults, which is the remaining gap.

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?

States a specific resource and scope: 'what mix of award types ONE institution wins' with concrete example questions about R01s, centers, and training money. The two-scope behavior (entity-scoped portfolio vs system-wide RPG breakdown) is spelled out. It falls short of 5 only because it never mentions the closely related sibling activity_code_distribution, so the agent must infer the boundary from names alone.

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?

Opens with an explicit trigger ('Use this tool when the user asks...') and supplies three example user phrasings that map to this tool. It also warns that the two scopes are NOT comparable, which prevents a plausible misuse. It does not name a competing tool or state when another sibling should be chosen instead, keeping it below 5.

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

rank_institutionsRank NIH institutions (RPG research)A
Read-onlyIdempotent
Inspect

Use this tool when the user asks which institutions get the most NIH money — 'top NIH-funded universities', 'where does NCI money go', 'rank research hospitals by R01 funding'. Each ranked row also yields its entity_id, the canonical institution identifier. Ranks institutions by competitive RPG-research NIH funding (R01 baseline), excluding intramural/contracts/centers/career/training, de-duplicated on core_project_num; NULL total_funding is not reported, never $0. total_funding here is RPG-research-only and is NOT comparable to the all-mechanism NIH totals served elsewhere. Bounds: limit 1-50 (default 20), offset 0-100000, fiscal years 1985-2100, ic 2-64 chars (NIH abbreviation or code, e.g. NCI or CA), sort_by one of composite | funding_scale | portfolio_breadth | new_grant_activity | avg_award_size.

NameRequiredDescriptionDefault
icNo
limitNo
offsetNo
sort_byNocomposite
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare the read-only/idempotent safety profile, and the description adds substantial context on top: the RPG-research-only scope, exclusions (intramural/contracts/centers/career/training), de-duplication on core_project_num, and the rule that NULL total_funding is omitted rather than shown as $0. The comparability caveat prevents a serious downstream misreading.

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?

Front-loaded with the when-to-use trigger, followed by output, methodology, the comparability warning, and bounds. Dense but every sentence adds decision-relevant information with no filler.

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 an output schema present, the description needn't explain return shape, yet it still notes the ranked rows yield entity_id. Combined with full bounds and scope caveats, an agent has everything needed to invoke this 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 carries the full burden and does so: it documents limit (1-50, default 20), offset (0-100000), fiscal years (1985-2100), ic format (2-64 chars, abbreviation or code) with examples, and enumerates all five sort_by values. This is near-complete parameter documentation despite the empty 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 states a specific verb and resource ('Ranks institutions by competitive RPG-research NIH funding') and immediately scopes it with the R01 baseline and exclusions. It is clearly distinguishable from siblings like get_institution_profile or institution_concentration.

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?

It gives explicit triggering conditions with concrete user phrasings ('top NIH-funded universities', 'rank research hospitals by R01 funding'). It also warns the totals are not comparable to all-mechanism figures 'served elsewhere', but it never names the specific sibling tool an agent should switch to, so it stops short of full when-not/alternative routing.

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

search_grantsSearch OpenNIH NIH grantsA
Read-onlyIdempotent
Inspect

Use this tool when the user asks to find NIH grants — by topic, principal investigator, institution, NIH Institute/Center, activity code, fiscal year, or project number ('what NIH grants exist on CRISPR', 'show me Stanford's R01s in 2022', 'look up 5R01CA036569-02'). This is the primary entry point: results carry pi_profile_id, the NIH RePORTER PI identifier. Read-only bounded search over the entity-resolved NIH ExPORTER/RePORTER corpus; results include mechanism_class, funding_basis and provenance, and a null award_amount means not reported, never zero. pi_name matches either name order ('Michael Platt' = 'PLATT, MICHAEL'; corpus form is LAST, FIRST). Bounds: query/text_search/institution/pi_name 2-64 chars, project_num ^[A-Z0-9-]{1,24}$, activity_code ^[A-Z0-9]{1,5}$, fiscal years 1985-2100, limit 1-50 (default 20), offset 0-100000 (offset>10000 is rate-limited to 12/min — partition by fiscal_year instead). meta.total_funding is the full matching-slice sum, not the returned page. Results are cached for ~1 hour. Counting: one result is one source application-year row, so (project_num, fiscal_year) is NOT unique - a multi-component award (P/U center) emits one row per sub-project, so the same project_num can appear several times in one fiscal year with different PIs and titles. These are distinct NIH application records, not duplicates. Each row carries appl_id, the NIH application id and authoritative row identity - two rows sharing (project_num, fiscal_year) with different appl_id are distinct sub-project applications, and appl_id is the key to de-duplicate on. meta.total counts rows, not grants; meta.unique_project_nums counts distinct project numbers, and meta.distinct_awards (row field core_project_num) counts distinct awards.

NameRequiredDescriptionDefault
icNo
limitNo
queryNo
offsetNo
pi_nameNoPI name in either order: 'Michael Platt' or the corpus form 'PLATT, MICHAEL' both match; a surname alone ('Platt') matches every PI with that surname.
institutionNo
project_numNo
text_searchNo
activity_codeNo
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: caching for about one hour, offset rate limiting above 10,000, null award_amount semantics, PI name matching order, and row-level counting rules. It also explains that multi-component awards emit multiple application-year rows and identifies appl_id as the authoritative row identity.

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 long but front-loads the intended use cases and key examples before moving into operational details. Most sentences carry useful constraints or caveats, though the counting and deduplication explanation is dense enough to feel somewhat overloaded.

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?

For a complex 11-parameter search tool with very low schema description coverage, the description covers most critical invocation behavior, including bounds, caching, rate limits, and row-counting semantics. The remaining gap is partial explanation of some parameter distinctions and matching rules, though the output schema exists and reduces the need to explain return fields.

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 description coverage is only 9%, so the description must compensate, and it does for many parameters by giving length bounds, regex constraints, fiscal-year range, limit/offset ranges, and PI name matching behavior. It leaves some ambiguity around ic, query vs text_search, and institution matching semantics, so it is strong but not complete.

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 states a specific verb and resource: search NIH grants by topic, PI, institution, IC, activity code, fiscal year, or project number. It explicitly positions this as the primary entry point and differentiates it from analytics-style siblings by describing row-level grant search behavior.

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?

It gives concrete user-intent examples such as finding grants on CRISPR, Stanford R01s in 2022, or looking up a specific project number. It clearly states when to use the tool, but does not explicitly compare against siblings like fetch, search, or get_pi_profile for adjacent needs.

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

source_statusOpenNIH source statusA
Read-onlyIdempotent
Inspect

Use this tool when the user asks whether the OpenNIH corpus is loaded, which official sidecars are available, or how stale the data might be — and before reporting 'no such grant', since corpus_lag_note explains that a grant added to RePORTER after the snapshot cutoff is absent here, not nonexistent. Read-only status for the deployed NIH project corpus and official sidecars. Takes no parameters; no caller paths or external URLs are accepted.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuine context beyond that: the corpus_lag_note snapshot-cutoff semantics that explain absence-vs-nonexistence, and the constraint that no caller paths or external URLs are accepted. Return details are covered by the output schema, so nothing further is required.

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?

Three sentences, front-loaded with the usage trigger before the purpose statement, and each sentence carries distinct information. Slightly dense in the opening clause about corpus_lag_note, but no filler.

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?

Complete for a no-param status tool: purpose, trigger conditions, the interpretation caveat for missing grants, and input constraints are all covered. With annotations and an output schema present, no further behavioral disclosure is needed.

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?

Zero parameters, so the baseline is 4. The description usefully confirms this by stating it takes no parameters and accepts no caller paths or external URLs, matching additionalProperties=false in 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 states a specific verb and resource: 'Read-only status for the deployed NIH project corpus and official sidecars.' It also enumerates what status means (whether corpus is loaded, which sidecars exist, staleness), clearly distinguishing it from query siblings like search_grants or fetch.

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

Usage Guidelines5/5

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

It gives explicit trigger conditions ('when the user asks whether the OpenNIH corpus is loaded, which official sidecars are available, or how stale the data might be') plus a precondition for use before reporting 'no such grant'. The negative case — grant absent because it postdates the snapshot cutoff — is spelled out rather than left to inference.

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

topic_trendNIH topic funding trendA
Read-onlyIdempotent
Inspect

Use this tool when the user asks how a research topic has trended over time — 'is CRISPR funding growing', 'how many p53 grants per year', 'when did NIH start funding long COVID'. Returns yearly project-row counts plus recorded award totals for a title keyword match; multi-word queries AND their words in any order. Bounds: query is REQUIRED, 2-64 characters; fiscal years 1985-2100 with fiscal_year_start <= fiscal_year_end. Not paginated.

NameRequiredDescriptionDefault
queryYes
fiscal_year_endNo
fiscal_year_startNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnly/idempotent/openWorld=false, but the description adds real behavioral context beyond them: the AND-in-any-order multi-word semantics, 'not paginated', the returned shape (yearly counts plus recorded award totals), and hard bounds. Contradicts nothing.

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 the trigger and examples, then constraints. Slightly dense in the middle clause but every sentence carries information an agent needs to call the tool correctly.

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?

Covered: trigger, match semantics, return shape, bounds, pagination. An output schema exists so return values needn't be detailed. Minor omission is the meaning of null fiscal year bounds, but the definition is otherwise sufficient for correct invocation.

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 the description must carry parameter meaning, and it does: query is REQUIRED and 2-64 chars, fiscal years 1985-2100, and start<=end. It omits explaining what happens when fiscal_year_start/end are null (default), a minor 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?

States a specific verb+resource (topic funding trend over time) with concrete example queries, and distinguishes from siblings like funding_trend and funding_growth through the title-keyword framing and the 'how has a topic trended' use case.

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?

Gives explicit trigger phrasing ('Use this tool when the user asks how a research topic has trended over time') plus three example queries, but does not name the sibling alternatives (funding_trend, funding_growth) or clarify 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsearch_grants1 field changed
      • addedInput schema / properties / pi_name / description
        Added value: +"PI name in either order: 'Michael Platt' or the corpus form 'PLATT, MICHAEL' both match; a surname alone ('Platt') matches every PI with that surname."
  2. 14 tool updates
    • First observedactivity_code_distribution
    • First observedfetch
    • First observedfunding_growth
    • First observedfunding_trend
    • First observedget_institution_profile
    • First observedget_pi_profile
    • First observedic_topic_cross
    • First observedinstitution_concentration
    • First observedmechanism_mix
    • First observedrank_institutions
    • First observedsearch
    • First observedsearch_grants
    • First observedsource_status
    • First observedtopic_trend

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    MCP server for searching research grants across NSF (US), ERC (EU), and KRF/NRF (Korea) via a unified interface. NIH excluded—covered by existing connectors.
    3
    3 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Read-only biomedical MCP server connecting PubMed, ClinicalTrials.gov, ClinVar, gnomAD, OncoKB, Reactome, KEGG, UniProt, PharmGKB, CPIC, OpenFDA, Monarch Initiative, GWAS Catalog, and more. One command grammar for all biomedical entities — genes, variants, diseases, drugs, trials, articles, phenotypes, pathways, proteins, diagnostics, and adverse events. 27 tools. Apache-2.0 license.
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for maintaining specific Wikidata items (person, company, publications) with read tools and a two-step write workflow that enforces sourced, human-approved batch edits.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources