Skip to main content
Glama

us-lobbying-mcp-server

Server Details

Search US lobbying disclosures and foreign-agent registrations via MCP.

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
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/us-lobbying-mcp-server
GitHub Stars
1
Server Listing
us-lobbying-mcp-server

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a fairly distinct resource: filings, foreign agents, lobbyists, contributions, issue spending, client profiles, reference vocabularies, and staged-table SQL. Some boundaries blur—get_issue_spending vs. search_filings with issue_code filters, and the dataframe_* tools overlap with every analytical tool as a generic SQL escape hatch—but the dense descriptions do enough to steer selection.

Naming Consistency4/5

All tools share the uslobbying_ prefix and mostly follow verb_noun (get_client_profile, search_filings, list_reference). The two dataframe_describe/dataframe_query tools invert to noun_verb, a minor deviation from the otherwise consistent pattern.

Tool Count5/5

Nine tools is well-scoped for a lobbying-disclosure research server, covering each data domain (LDA filings, FARA, LD-203, lobbyists, references) plus the SQL inspection pair without redundancy.

Completeness4/5

The surface covers search and full-record retrieval for filings, contributions, issue spending, lobbyists, foreign agents, client relationships, and reference vocabularies, giving near-complete coverage. Minor gaps: no dedicated registrant/government-entity profile tool, and no explicit export/raw-document retrieval beyond filing_uuid lookups.

Available Tools

9 tools
uslobbying_dataframe_describeDescribe disclosure tablesB
Read-onlyIdempotent
Inspect

Inspect exact staged table schemas, row counts, lifecycle, acquisition coverage and provenance before SQL.

NameRequiredDescriptionDefault
canvas_idYesCanvas token returned by an analytical disclosure tool.
table_nameNoExisting table to inspect; omit for every table in this canvas.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
tablesNoComplete table metadata, or an empty array for an empty canvas.
guidanceNoTable names and dataframe instructions.
canvas_idNoTenant-scoped canvas access token.
query_toolNoQuery or retrieve materialized table rows.
describe_toolNoInspect exact table schemas before SQL.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds that this is a pre-SQL inspection step and enumerates the facets examined (lifecycle, acquisition coverage, provenance), which is real added context, but it says nothing about cost, size of output, or whether inspection reveals staleness/caveats.

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?

A single dense sentence with the action and the timing constraint front-loaded; there is no filler. The stacked noun list ('lifecycle, acquisition coverage and provenance') is slightly opaque but each item conveys a distinct facet.

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?

An output schema exists so return values need no explanation, and the two parameters are fully specified structurally. What is missing is conceptual grounding: how a canvas_id is obtained, what 'staged' versus live tables means, and whether inspection is required before querying.

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 100% and both parameters are documented there, including the 'omit for every table in this canvas' semantics. The description adds no parameter-level meaning beyond the schema, so baseline 3 applies.

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 verb (inspect) and a specific set of resources (staged table schemas, row counts, lifecycle, coverage, provenance), which is clearly distinct from the query sibling. The phrase 'staged table' is never defined, so an agent unfamiliar with the canvas workflow must infer what is being inspected.

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?

'before SQL' implies a preflight role ahead of uslobbying_dataframe_query, which is useful implied sequencing. However, the alternative tool is not named, and there is no explicit statement of when not to use this or what to do first (e.g., that a canvas_id must already exist from another tool).

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

uslobbying_dataframe_queryQuery disclosure tablesAInspect

Run one read-only SELECT over staged disclosure tables, materialize the complete result, then retrieve whole rows by result_table and next_offset without rerunning SQL. Inspect columns with uslobbying_dataframe_describe first.

NameRequiredDescriptionDefault
sqlNoOne read-only SELECT; exclusive with result_table and offset.
offsetNoCanonical row offset for result_table, default zero.
canvas_idYesCanvas token returned by a disclosure analytical tool.
row_limitNoMaximum whole rows in this response; positive integers clamp to 100, then to any lower provider ceiling.
register_asNoFresh result table name for a new SQL call; omit for a generated name.
result_tableNoPreviously materialized result table; exclusive with sql and register_as.

Output Schema

NameRequiredDescription
rowsNoWhole JSON-safe rows.
errorNoPresent when the call failed. Absent on success.
offsetNoCanonical-order starting row offset.
columnsNoComplete result schema.
datasetNoMaterialized dataset and routing.
guidanceNoTable names and dataframe instructions.
canvas_idNoTenant-scoped canvas access token.
row_countNoExact materialized result count.
row_orderNoDelivery orders by all materialized values.
truncatedNoMore materialized rows remain; continue with next_offset.
query_toolNoQuery or retrieve materialized table rows.
next_offsetNoNext undelivered row offset.
result_tableNoStable materialized result table.
describe_toolNoInspect exact table schemas before SQL.
rows_returnedNoRows actually delivered.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether this result has no remaining delivery rows.
effective_row_limitNoEffective row limit when a delivery or provider ceiling lowers the requested limit.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds important behavior beyond the annotations: one SELECT is executed, the complete result is materialized, and subsequent row retrieval does not rerun SQL. This clarifies the stateful materialization step, which is consistent with readOnlyHint=false, while annotations already cover destructive and idempotent characteristics.

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, front-loaded with the primary action, and no wasted text. The prerequisite follows naturally after the workflow description.

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?

The description covers the core workflow, materialization behavior, retrieval path, and the describe-first prerequisite. With a full output schema and complete parameter descriptions, the remaining details are adequately handled by structured fields, though the next_offset/offset wording could be tightened.

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 100%, so the baseline is 3. The description adds useful mode semantics around sql, result_table, and offset-based row retrieval, though it refers to 'next_offset' while the schema parameter is 'offset', creating a minor terminology mismatch.

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: run one read-only SELECT over staged disclosure tables, materialize results, and retrieve rows by result table. It clearly distinguishes the SQL path from the retrieval path, and points to the sibling describe tool for column inspection.

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 a clear workflow prerequisite: inspect columns with uslobbying_dataframe_describe first. It also explains the two operating modes, SQL versus result_table retrieval, though it does not explicitly compare when to use this tool instead of the other search-oriented siblings.

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

uslobbying_get_client_profileUslobbying Get Client ProfileA
Read-onlyIdempotent
Inspect

Resolve client relationship records by client_name in mode resolve (default), then use mode profile with explicit client_ids and years. Select candidates[].id, preserving secondary client_id as source data. IDs identify registrant relationships, not a verified corporate identity. Follow collecting cursors before interpreting separate income and expense ledgers. Typed rows preserve every audit filing; pass a selected filing UUID to uslobbying_search_filings for its complete record. Optional canvas datasets support SQL.

NameRequiredDescriptionDefault
modeNoresolve (default) finds client_name candidates; profile requires selected client_ids and years. Omit on continuation.
yearsNoRequired explicit analytical year scope; sorted and deduplicated.
cursorNoContinue the original scope; other query fields may be omitted.
row_setsNoInline analytical sets; omit for all sets. Selection never limits acquisition, totals or SQL staging. Omitted sets remain available from a new call with another selection or staged tables. Continue with omitted or equivalent row_sets.
canvas_idNoReuse this canvas only after complete analytical acquisition.
max_pagesNoSource pages per call; positive integers clamp to five, default one for discovery, five for analysis.
page_sizeNoUpstream rows per page; positive integers clamp to 25, default 25.
client_idsNoRequired explicit relationship record IDs from candidates[].id in profile mode; candidates[].client_id is a secondary source number.
client_nameNoRequired literal name in resolve mode.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.

Output Schema

NameRequiredDescription
modeNoClient resolution or selected relationship analysis; absent on stored-record retrieval.
errorNoPresent when the call failed. Absent on success.
firmsNoFirm breakdowns in this window.
yearsNoExplicit requested years.
offsetNoFinal record delivery offset.
sourceNoOfficial source system.
statusNoSource acquisition status, separate from row delivery.
datasetNoComplete SQL metadata on the first final window and its replay.
noticesNoLimitations and success notices.
coverageNoAcquisition progress, independent of delivery.
guidanceNoNext profile-mode selection step.
canvas_idNoTenant-scoped canvas access token.
truncatedNoMore data is available through next_cursor or record_handles; no source data was discarded.
activitiesNoSelected activities in this window; no money columns.
candidatesNoAll matching relationships; never auto-merged.
client_idsNoCaller-selected client relationship IDs.
query_toolNoQuery or retrieve materialized table rows.
selectionsNoVersion-selection decisions in this window.
attributionNoRequired verbatim attribution for LDA data.
issue_codesNoOverlapping issue breakdowns in this window.
methodologyNoAccounting limitations.
next_cursorNoNext acquisition or output window cursor.
raw_filingsNoAll acquired versions in this window, including selected versions.
retrieved_atNoRetrieval ISO timestamp.
describe_toolNoInspect exact table schemas before SQL.
record_windowNoLossless stored parent window.
total_recordsNoExact final record count when known.
annual_ledgersNoComplete-year ledgers in this window; absent while collecting.
record_handlesNoDeferred complete parents.
retrieval_toolNoTool that retrieves this parent.
row_set_totalsNoExact all-set totals after acquisition completes.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether all result rows have been delivered.
row_set_offsetsNoSelected-set rows delivered or deferred before this window; others zero.
canvas_availableNoSQL canvas support is enabled.
records_deferredNoOversized parents available through handles.
records_returnedNoComplete records delivered in this window.
selected_filingsNoComplete selected filings in this window.
attribution_basisNoWhole filings mentioning an issue; buckets overlap.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
targeted_entitiesNoTargeted entities in this window.
snapshot_source_urlsNoOfficial snapshot URLs.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/open-world, but the description adds non-obvious behavioral caveats: IDs identify registrant relationships rather than verified corporate identity, typed rows preserve every audit filing, and cursors must be collected before interpreting separate income/expense ledgers. These are real behavioral disclosures beyond the structured fields, though pagination and response-size behavior are only in the schema.

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 dense and front-loaded with the core workflow in the first sentence and refinements (cursors, filing UUID handoff, canvas SQL) after. It is jargon-heavy but each sentence carries information; minor tightening could improve it.

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 13-parameter, two-mode tool with an output schema and read-only annotations, the description covers the workflow, the ID caveat, cursor handling, and the handoff to search_filings. Return-value details are delegated to the output schema appropriately; only minor gaps (e.g., canvas staging details) remain.

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 100% so the baseline is 3, but the description adds genuine meaning: it clarifies that candidates[].id should be selected while the secondary client_id is preserved as source data, and explains the resolve/profile mode split. That goes beyond restating schema field descriptions.

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 ('Resolve client relationship records by client_name') and clearly delineates the two modes (resolve vs profile). It names one downstream sibling (uslobbying_search_filings) but does not distinguish itself from the other search_* siblings, so it is clear but not fully differentiated.

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 an explicit two-step workflow (resolve by client_name first, then profile with explicit client_ids and years) and tells the agent to follow collecting cursors before interpreting ledgers. It routes the agent to uslobbying_search_filings for complete filing records, though it does not explicitly say when NOT to use this tool versus the other sibling searches.

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

uslobbying_get_contributionsUslobbying Get ContributionsA
Read-onlyIdempotent
Inspect

Retrieve complete semiannual LD-203 reports, contributions, PAC relationships and certifications, preserving original and amended reports. Child predicates must match the same item; full parent contribution lists and matched_item_indexes remain available. Report counts are not donation counts and no cross-report donation total is inferred.

NameRequiredDescriptionDefault
payeeNoCase-insensitive literal payee substring.
cursorNoContinue the original scope; other query fields may be omitted.
honoreeNoCase-insensitive literal honoree substring.
max_pagesNoSource pages per call; positive integers clamp to five, default one for discovery, five for analysis.
page_sizeNoUpstream rows per page; positive integers clamp to 25, default 25.
amount_maxNoInclusive local same-item maximum exact decimal USD; complete parent lists remain available.
amount_minNoInclusive local same-item minimum exact decimal USD; complete parent lists remain available.
contributorNoCase-insensitive literal contributor substring.
filing_yearNoRequired first-call reporting year, 2008 through current UTC year.
lobbyist_idNoLobbyist filer ID.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
filing_periodNoSemiannual period.
lobbyist_nameNoLobbyist name upstream search.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.
registrant_idNoRegistrant ID.
registrant_nameNoRegistrant name upstream search.
contribution_typeNoOfficial feca, he, me, ple or pic payment code.
contribution_date_afterNoInclusive earliest item calendar date.
contribution_date_beforeNoInclusive latest item calendar date.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
offsetNoFinal record delivery offset.
sourceNoOfficial source system.
noticesNoLimitations and success notices.
reportsNoFull parent reports and complete child lists.
coverageNoAcquisition progress, independent of delivery.
truncatedNoMore of the parent value remains available through record windows.
attributionNoRequired verbatim attribution for LDA data.
next_cursorNoNext acquisition or output window cursor.
retrieved_atNoRetrieval ISO timestamp.
record_windowNoLossless stored parent window.
total_recordsNoExact final record count when known.
record_handlesNoDeferred complete parents.
retrieval_toolNoTool that retrieves this parent.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether all result rows have been delivered.
amendment_policyNoAmendments remain separate reports.
records_deferredNoOversized parents available through handles.
records_returnedNoComplete records delivered in this window.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
item_count_in_batchNoItems in returned complete parent lists.
snapshot_source_urlsNoOfficial snapshot URLs.
report_count_in_batchNoComplete parent reports returned.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A3.8/5.0
Behavior4/5

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

Adds real behavioral context beyond the readOnly/idempotent annotations: original and amended reports are preserved, child predicates must match the same item, matched_item_indexes and full parent lists remain available, and report counts are not donation counts with no cross-report totals inferred. That last point is a meaningful anti-misinterpretation warning not encoded anywhere in the schema.

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?

Three sentences, each carrying distinct information: scope, item-matching rule, and counting caveat. Front-loaded with what is retrieved; no filler.

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 21 fully documented parameters and an output schema, the description supplies the remaining semantic guardrails (amendments, item-level matching, donation-vs-report counting). It does not explain pagination/cursor interaction with max_pages across calls, which is the main residual gap.

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 coverage is 100%, so parameters are already documented; the description only reinforces the 'same item' semantics of the amount predicates and the availability of parent lists, which the schema descriptions largely repeat. Baseline 3 is appropriate.

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 verb and resource ('Retrieve complete semiannual LD-203 reports, contributions, PAC relationships and certifications'), which is clearly distinct from search_filings or get_issue_spending. It does not name a sibling or explicitly contrast with one, so it stops short of 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 Guidelines3/5

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

Usage is implied by the resource (LD-203 contribution retrieval) and the caveats steer interpretation, but there is no explicit when-to-use vs. when-to-use-an-alternative guidance against the eight sibling tools. Nothing tells the agent whether to prefer this over search_filings for a given question.

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

uslobbying_get_issue_spendingUslobbying Get Issue SpendingA
Read-onlyIdempotent
Inspect

Aggregate separate income and expense amounts on quarterly filings mentioning issue_code across explicit years. This is whole-filing association, not allocated issue spending; issue buckets overlap. All versions are acquired before latest-period selection and local issue filtering. Broad scans can take hours; narrow client_id or registrant_id when appropriate. Follow collecting cursors before interpreting final typed rows or SQL datasets. Pass a selected filing UUID to uslobbying_search_filings for its complete record.

NameRequiredDescriptionDefault
yearsNoRequired explicit analytical year scope; sorted and deduplicated.
cursorNoContinue the original scope; other query fields may be omitted.
row_setsNoInline analytical sets; omit for all sets. Selection never limits acquisition, totals or SQL staging. Omitted sets remain available from a new call with another selection or staged tables. Continue with omitted or equivalent row_sets.
canvas_idNoReuse this canvas only after complete analytical acquisition.
client_idNoOptional client relationship record ID from candidates[].id in uslobbying_get_client_profile resolve mode; candidates[].client_id is secondary.
max_pagesNoSource pages per call; positive integers clamp to five, default one for discovery, five for analysis.
page_sizeNoUpstream rows per page; positive integers clamp to 25, default 25.
issue_codeNoRequired first-call code from uslobbying_list_reference topic issue_codes.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.
registrant_idNoOptional native registrant scope.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
firmsNoFirm breakdowns in this window.
yearsNoExplicit requested years.
offsetNoFinal record delivery offset.
sourceNoOfficial source system.
statusNoSource acquisition status, separate from row delivery.
datasetNoComplete SQL metadata on the first final window and its replay.
noticesNoLimitations and success notices.
coverageNoAcquisition progress, independent of delivery.
guidanceNoTable names and dataframe instructions.
canvas_idNoTenant-scoped canvas access token.
truncatedNoMore data is available through next_cursor or record_handles; no source data was discarded.
activitiesNoSelected activities in this window; no money columns.
issue_codeNoRequested issue membership code.
query_toolNoQuery or retrieve materialized table rows.
selectionsNoVersion-selection decisions in this window.
attributionNoRequired verbatim attribution for LDA data.
issue_codesNoOverlapping issue breakdowns in this window.
methodologyNoAccounting limitations.
next_cursorNoNext acquisition or output window cursor.
raw_filingsNoAll acquired versions in this window, including selected versions.
retrieved_atNoRetrieval ISO timestamp.
describe_toolNoInspect exact table schemas before SQL.
record_windowNoLossless stored parent window.
total_recordsNoExact final record count when known.
annual_ledgersNoComplete-year ledgers in this window; absent while collecting.
record_handlesNoDeferred complete parents.
retrieval_toolNoTool that retrieves this parent.
row_set_totalsNoExact all-set totals after acquisition completes.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether all result rows have been delivered.
row_set_offsetsNoSelected-set rows delivered or deferred before this window; others zero.
canvas_availableNoSQL canvas support is enabled.
records_deferredNoOversized parents available through handles.
records_returnedNoComplete records delivered in this window.
selected_filingsNoComplete selected filings in this window.
attribution_basisNoWhole filings mentioning an issue; buckets overlap.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
targeted_entitiesNoTargeted entities in this window.
snapshot_source_urlsNoOfficial snapshot URLs.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly and idempotent, but the description adds substantive behavior: whole-filing association rather than allocated amounts, overlapping issue buckets, all versions acquired before latest-period selection and local issue filtering, and a real latency warning ('can take hours'). The cursor instruction ('follow collecting cursors before interpreting final typed rows or SQL datasets') discloses a non-obvious execution contract that would otherwise cause misreads.

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?

Purpose and the key caveat are front-loaded in the first two sentences, then performance, cursor, and handoff notes follow in priority order. It is dense but every sentence carries operational information; only the repeated references to versions/cursors verge on redundancy.

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 13-parameter aggregation tool with an output schema and full annotation coverage, the description supplies the remaining load-bearing context: association semantics, overlap caveat, latency, cursor discipline, and cross-tool handoffs. An agent has enough to call it correctly and to interpret the results without over-reading them as allocated issue spending.

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 100%, so the baseline is 3, but the description adds meaning the schema does not: years is an explicit analytical scope, issue_code must come from uslobbying_list_reference topic issue_codes on the first call, and client_id should be resolved from uslobbying_get_client_profile candidates. The cursor guidance further frames how row_sets and continuation interact with acquisition and totals.

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 first sentence names a specific verb (aggregate) and resource (income/expense amounts on quarterly filings keyed to issue_code across explicit years). It immediately disambiguates the semantics with 'whole-filing association, not allocated issue spending; issue buckets overlap', which no sibling would claim. The handoff sentence to uslobbying_search_filings clarifies the boundary against that 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?

It gives concrete operating advice: 'Broad scans can take hours; narrow client_id or registrant_id when appropriate', and tells the agent to pass a selected filing UUID to uslobbying_search_filings for the complete record. That covers when to narrow and where to escalate, but there is no explicit when-not-to-use versus siblings like uslobbying_get_contributions or uslobbying_dataframe_query.

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

uslobbying_list_referenceUslobbying List ReferenceA
Read-onlyIdempotent
Inspect

List official issue codes, filing types, government entities, contribution types and countries, or explain identifiers, methodology and FARA rules. Optional filter performs case-insensitive literal token-AND matching across the complete vocabulary. Follow next_cursor for pinned result windows; retrieve oversized entries with this tool using record_handle and record_path. Countries include separately attributed LDA codes and FARA source labels; FARA labels are not guessed ISO codes.

NameRequiredDescriptionDefault
topicNoVocabulary or explanatory topic; required on the first call.
cursorNoPinned continuation; omit original topic/filter or repeat them unchanged.
filterNoEvery whitespace-separated token must occur literally in an entry.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
topicNoRequested vocabulary.
offsetNoStart position in the pinned filtered vocabulary.
entriesNoComplete entries delivered in this pinned vocabulary window.
noticesNoSource limitations and empty-result recovery.
truncatedNoMore entries or deferred record values remain retrievable.
next_cursorNoOpaque continuation of the pinned vocabulary.
source_urlsNoOfficial source references.
retrieved_atNoVocabulary retrieval timestamp.
record_windowNoExact recursive window of a deferred vocabulary entry.
total_entriesNoEntries before local filtering.
record_handlesNoOversized entries retrievable through this same tool.
retrieval_toolNoTool used to retrieve deferred vocabulary entries.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
matched_entriesNoEntries matching every literal filter token.
output_completeNoEvery matched entry has been delivered or deferred.
records_deferredNoOversized entries retained behind handles.
records_returnedNoComplete entries delivered in this window.
cursor_expires_atNoAbsolute expiry of retained entries and continuations.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent/closed-world, but the description adds substantial behavior: cursor results are 'pinned windows' that ignore or repeat the original topic/filter, oversized values must be fetched back through this same tool via record_handle + record_path, and countries mix LDA codes with non-ISO FARA source labels that are explicitly not normalized. These are exactly the non-obvious traits an agent would otherwise get wrong.

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?

Four front-loaded sentences, each carrying distinct information (scope, filter semantics, paging/overflow mechanics, data caveat) with no filler. Density is high but justified; a slightly clearer split between the list vs. explain modes would improve scanability.

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, return shapes need not be explained. All seven parameters are fully documented in-schema, and the description closes the remaining gaps (continuation semantics, overflow retrieval, country-code caveat) for what is otherwise a fairly complex paging-plus-reference 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?

Schema coverage is 100%, so the baseline is 3; the description still adds relational meaning the schema does not spell out, namely that record_handle and record_path are used together on this tool to unpack oversized entries, and that cursor payloads override or repeat topic/filter. It does not add format detail for record_path (JSON Pointer) or record_offset, which the schema already carries.

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 (list / explain) and enumerates the exact resource set: issue codes, filing types, government entities, contribution types, countries, plus explanatory topics. This vocabulary-topic framing cleanly distinguishes it from all siblings, which are search/get tools over filings and agents.

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 clear operating context: filter is optional and does token-AND literal matching, cursors drive continuation, and record_handle/record_path are for oversized entries. It stops short of naming alternatives or stating when not to use it (e.g., use search_filings rather than this reference tool for record lookups).

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

uslobbying_search_filingsUslobbying Search FilingsA
Read-onlyIdempotent
Inspect

Search federal lobbying registrations and activity reports, or retrieve a complete filing by filing_uuid from evidence or analytical selections. Native filters include posting dates, reported amounts, client location and foreign entities; issue_code filters activities locally and cannot narrow upstream requests. Follow next_cursor for all versions. Amounts are separate nullable USD strings; disclosure text is untrusted record data.

NameRequiredDescriptionDefault
cursorNoContinue the original scope; other query fields may be omitted.
client_idNoClient relationship record ID from candidates[].id in uslobbying_get_client_profile resolve mode; candidates[].client_id is secondary.
max_pagesNoSource pages per call; positive integers clamp to five, default one for discovery, five for analysis.
page_sizeNoUpstream rows per page; positive integers clamp to 25, default 25.
amount_maxNoNative maximum reported filing amount, exact decimal USD with at most two fractional digits.
amount_minNoNative minimum reported filing amount, exact decimal USD with at most two fractional digits.
issue_codeNoLocal activity membership code from topic issue_codes.
client_nameNoLiteral client name upstream search.
filing_typeNoOfficial code from uslobbying_list_reference topic filing_types.
filing_uuidNoExact filing UUID from evidence or analytical selections; retrieves complete source records.
filing_yearNoReported year, 1999 through the current UTC year.
lobbyist_idNoLobbyist ID.
record_pathNoJSON Pointer to a stored value; empty selects the root.
client_stateNoNative client state code, normalized uppercase.
posted_afterNoEarliest native filing posting calendar date.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
filing_periodNoSource reporting period.
lobbyist_nameNoNative disclosed lobbyist name search.
posted_beforeNoLatest native filing posting calendar date.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.
registrant_idNoRegistrant ID.
client_countryNoNative client country code, normalized uppercase.
registrant_nameNoLiteral registrant name upstream search.
specific_issuesNoSearch the disclosed specific-issues text, such as H.R. 1 or telecommunications.
foreign_entity_nameNoNative disclosed foreign entity name search.
foreign_entity_countryNoNative foreign entity country code, normalized uppercase.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
offsetNoFinal record delivery offset.
sourceNoOfficial source system.
filingsNoComplete matched source filings.
noticesNoLimitations and success notices.
coverageNoAcquisition progress, independent of delivery.
truncatedNoMore of the parent value remains available through record windows.
attributionNoRequired verbatim attribution for LDA data.
next_cursorNoNext acquisition or output window cursor.
retrieved_atNoRetrieval ISO timestamp.
record_windowNoLossless stored parent window.
total_recordsNoExact final record count when known.
record_handlesNoDeferred complete parents.
retrieval_toolNoTool that retrieves this parent.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether all result rows have been delivered.
amendment_policyNoOriginals and amendments remain separate.
records_deferredNoOversized parents available through handles.
records_returnedNoComplete records delivered in this window.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
snapshot_source_urlsNoOfficial snapshot URLs.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds value beyond that: amounts are separate nullable USD strings (not one aggregate), disclosure text is untrusted record data (a prompt-injection warning), and issue_code is applied post-fetch rather than upstream. It does not cover rate limits or page-budget interaction with max_pages.

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?

Four sentences, front-loaded with the primary capability before filter details and caveats. Dense and telegraphic in places ('Native filters include posting dates, reported amounts, client location and foreign entities'), but essentially every clause carries operational information.

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 27 optional parameters, an output schema, and full schema descriptions, the description supplies the remaining pieces an agent needs: the two invocation modes, cursor-based paging, local-vs-native filtering, and data-trust caveats. Paging budget behavior (max_pages/page_size defaults and clamps) is left entirely to the schema, which is a minor gap.

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 100%, so the baseline is 3; the description earns above that by explaining filter semantics the schema does not, specifically that issue_code filters activities locally and cannot narrow upstream requests, and that amounts are separate nullable strings. Several parameter groups (paging, record_*) are only described in the 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?

States a specific verb and resource ('Search federal lobbying registrations and activity reports') plus a second mode ('retrieve a complete filing by filing_uuid'). The two-mode structure lets an agent distinguish search vs. fetch, but it never names or contrasts the nearby siblings such as uslobbying_search_lobbyists or uslobbying_search_foreign_agents.

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 real routing context: filing_uuid mode is for retrieving complete records from evidence or analytical selections, and 'Follow next_cursor for all versions' tells the agent how to page to completion. It also warns that issue_code filters locally and cannot narrow upstream requests, which prevents a wrong usage pattern. Missing only explicit when-not-to-use guidance against sibling search tools.

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

uslobbying_search_foreign_agentsSearch foreign agentsA
Read-onlyIdempotent
Inspect

Search official FARA daily registrant or foreign-principal snapshots, or retrieve one registration principal, short-form or document collection. Follow cursors to pinned local windows; principal status differs from registrant status. Disclosure records do not establish wrongdoing or influence.

NameRequiredDescriptionDefault
modeNoSearch daily snapshots or fetch one registration detail collection; defaults to search.
cursorNoOpaque continuation; original filters may be omitted or repeated unchanged.
detailNoDetail collection, default foreign_principals; unavailable in search mode.
entityNoSearch entity, default registrants; unavailable in detail mode.
statusNoSelected entity status, default active; documents require all.
countryNoExact represented country/location label, foreign-principal search only.
page_sizeNoMaximum records in one local output window; positive integers clamp to 25, default 25.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
name_containsNoSearch-only literal case-insensitive token-AND match over entity names.
record_handleNoOpaque tenant/tool-bound deferred record handle; exclusive with source selectors and cursor.
record_offsetNoKey, item or Unicode-code-point offset.
registration_numberNoLossless digit-string registration number, required for detail mode.

Output Schema

NameRequiredDescription
modeNoOriginal acquisition mode.
errorNoPresent when the call failed. Absent on success.
detailNoSelected detail collection.
entityNoSelected search entity.
offsetNoStart position in the pinned result set.
sourceNoOfficial source system.
statusNoEffective selected entity status.
noticesNoLimitations and success notices.
recordsNoComplete normalized parent records delivered in this window.
coverageNoAcquisition progress, independent of delivery.
truncatedNoMore data is available through next_cursor, record_handles or record windows; no source data was discarded.
attributionNoRequired verbatim attribution for LDA data.
next_cursorNoOpaque next local result window.
source_urlsNoOfficial source URLs actually acquired.
retrieved_atNoRetrieval ISO timestamp.
record_windowNoExact recursive window of a retained parent.
total_matchesNoExact matched records in the pinned acquisition.
record_handlesNoRetained oversized parents, excluded from full records delivered.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether every matched parent has been delivered or deferred.
records_deferredNoOversized parents represented by handles.
records_returnedNoFull records delivered in this window.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
snapshot_source_urlsNoOfficial snapshot URLs.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and open-world behavior, yet the description adds real context: cursors bind to pinned local windows (so filter resubmission matters), status semantics vary by entity, and disclosure records carry no implication of wrongdoing. It omits any mention of the deferred record_handle workflow, but against annotation coverage this is a solid additive contribution.

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 compact sentences with the mode distinction front-loaded and no filler. Some phrasing is opaque jargon ('pinned local windows', 'retrieve one registration principal, short-form or document collection') that costs a little clarity for its density.

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?

With 13 parameters, an output schema and full annotation coverage, the description handles the primary search/detail split, cursors and status caveats adequately. However, the deferred record_handle / record_path / record_offset retrieval pattern — a non-obvious two-phase workflow for this tool — gets no mention at all, leaving a meaningful gap for a tool of this complexity.

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 100%, so the baseline is 3, but the description adds genuine semantic meaning beyond the schema: that cursor continuation is pinned to a local window and that identical status values mean different things for registrants vs foreign principals. Navigation parameters (record_path, record_offset, record_limit) are left entirely to the 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?

States specific verbs (search / retrieve) and specific resources (FARA daily registrant or foreign-principal snapshots, registration detail collections), which lets an agent distinguish this FARA-oriented tool from the lobbying-focused siblings like search_filings and search_lobbyists. It never names those siblings explicitly, so differentiation is implicit rather than stated.

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 FARA/disclosure framing implies when the tool applies, and 'principal status differs from registrant status' hints at a selection consideration. But there is no explicit when-to-use vs when-to-use-an-alternative guidance, and nothing routes the agent between this tool and the sibling search tools.

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

uslobbying_search_lobbyistsUslobbying Search LobbyistsA
Read-onlyIdempotent
Inspect

Find lobbyists by name or registrant in mode search, then retrieve filing-scoped evidence with mode activity, lobbyist_id and filing_year. Pass an evidence filing_uuid to uslobbying_search_filings for the complete filing. Covered positions are disclosed text, not verified present employment. Activity mode checks the requested lobbyist locally. Follow next_cursor for all results.

NameRequiredDescriptionDefault
modeNosearch (default) finds identities by name or registrant; activity requires lobbyist_id and filing_year. Omit with cursor.
nameNoLobbyist identity name substring.
cursorNoContinue the original scope; other query fields may be omitted.
client_idNoOptional activity client relationship record ID from candidates[].id in uslobbying_get_client_profile resolve mode; candidates[].client_id is secondary.
max_pagesNoSource pages per call; positive integers clamp to five, default one for discovery, five for analysis.
page_sizeNoUpstream rows per page; positive integers clamp to 25, default 25.
filing_yearNoRequired report year in activity mode.
lobbyist_idNoRequired in activity mode.
record_pathNoJSON Pointer to a stored value; empty selects the root.
record_limitNoMaximum object entries or array items, clamped to 25; text fragments use the response byte budget.
record_handleNoTenant/tool-bound deferred record handle.
record_offsetNoKey, item or Unicode-code-point offset.
registrant_idNoRegistrant identity ID.
registrant_nameNoRegistrant identity name substring.
covered_positions_onlyNoActivity only: require this lobbyist’s nonblank covered-position disclosure.

Output Schema

NameRequiredDescription
modeNoResolved operation.
errorNoPresent when the call failed. Absent on success.
offsetNoFinal record delivery offset.
sourceNoOfficial source system.
noticesNoLimitations and success notices.
coverageNoAcquisition progress, independent of delivery.
evidenceNoMatched filing-based participant evidence in activity mode.
lobbyistsNoComplete identity records in search mode.
truncatedNoMore of the parent value remains available through record windows.
attributionNoRequired verbatim attribution for LDA data.
next_cursorNoNext acquisition or output window cursor.
retrieved_atNoRetrieval ISO timestamp.
record_windowNoLossless stored parent window.
total_recordsNoExact final record count when known.
record_handlesNoDeferred complete parents.
retrieval_toolNoTool that retrieves this parent.
delivery_limitsNoClamped controls for this call; an empty map means no clamp. Immediate cursor replay retains its original values.
output_completeNoWhether all result rows have been delivered.
records_deferredNoOversized parents available through handles.
records_returnedNoComplete records delivered in this window.
cursor_expires_atNoContinuation expiry ISO timestamp.
effective_filtersNoNormalized effective scope.
snapshot_source_urlsNoOfficial snapshot URLs.
snapshot_retrieved_atNoFARA snapshot retrieval timestamp.
snapshot_last_modifiedNoUpstream Last-Modified header.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already cover read-only, open-world, and idempotent behavior, and the description adds useful caveats: covered positions are disclosed text rather than verified employment, activity mode checks the requested lobbyist locally, and cursors should be followed. It does not discuss rate limits or auth requirements, but the annotation set reduces that burden.

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 dense but front-loaded and free of filler. The caveat about covered positions is relevant, though the overall wording is somewhat compressed and could be easier to scan.

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 rich input schema, annotations, and output schema, the description supplies the key operational context an agent needs: mode selection, required activity inputs, filing handoff, disclosure caveat, and pagination behavior.

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 100%, so the schema already defines all 15 parameters. The description still adds cross-parameter meaning by explaining mode-dependent requirements and the cursor-based continuation pattern, which goes beyond isolated schema descriptions.

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 gives a specific verb and resource, "Find lobbyists by name or registrant," and clearly separates the two operating modes, search and activity. It also distinguishes this from uslobbying_search_filings by explaining the handoff for complete filings.

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 states that search is the default mode and that activity requires lobbyist_id and filing_year, and it names uslobbying_search_filings as the alternative for complete filing evidence. It does not explicitly describe when not to use this tool versus other siblings such as uslobbying_get_client_profile.

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. 9 tool updates
    • First observeduslobbying_dataframe_describe
    • First observeduslobbying_dataframe_query
    • First observeduslobbying_get_client_profile
    • First observeduslobbying_get_contributions
    • First observeduslobbying_get_issue_spending
    • First observeduslobbying_list_reference
    • First observeduslobbying_search_filings
    • First observeduslobbying_search_foreign_agents
    • First observeduslobbying_search_lobbyists

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.