Skip to main content
Glama
kwgoodwin

Clearon Legislation Monitor MCP

by kwgoodwin

Clearon Legislation Monitor MCP

MCP server for review-gated U.S. legislation discovery and watchlist monitoring.

It separates discovery leads from verified watchlist entries, records append-only observations and exceptions, and keeps official-source review in the loop before a measure becomes authoritative.

What it does

  • Records discovery candidates without silently promoting them into the watchlist

  • Requires explicit human review before watchlist acceptance

  • Tracks official-source observations, due reviews, and retrieval exceptions

  • Replays an append-only event log into a rebuildable snapshot

  • Optionally uses Open States and NYC Legistar as discovery helpers, never as final proof

Related MCP server: Operator ETL

What it does not do

  • It does not publish content or modify WordPress

  • It does not treat a keyword hit as legal verification

  • It does not treat third-party discovery results as source-of-record status

  • It does not convert retrieval failures into legal-status changes

Requirements

  • Node.js 20 or newer

  • A local MCP client that can launch a stdio server

Installation

cd tools/clearon-legislation-monitor-mcp
npm install
npm test
npm run smoke

MCP client setup

Example stdio configuration:

{
  "mcpServers": {
    "clearon-legislation-monitor": {
      "command": "node",
      "args": ["/absolute/path/to/clearon-legislation-monitor-mcp/server.mjs"],
      "env": {
        "CLEARON_LEGISLATION_WORKSPACE": "/absolute/path/to/workspace"
      }
    }
  }
}

If your normalized tracker inputs are not in the default workspace locations, also set:

  • CLEARON_LEGISLATION_REGISTRY_PATH

  • CLEARON_LEGISLATION_WATCHLIST_PATH

Storage

By default, monitor state is stored outside the repository in a user data directory:

  • macOS: ~/Library/Application Support/clearon-legislation-monitor-mcp/legislation-monitor

  • Linux: ${XDG_DATA_HOME:-~/.local/share}/clearon-legislation-monitor-mcp/legislation-monitor

  • Windows: %APPDATA%\\clearon-legislation-monitor-mcp\\legislation-monitor

Override that location with CLEARON_LEGISLATION_MONITOR_ROOT.

The canonical tracker inputs are still expected to come from your chosen workspace:

  • trackers/state-legislation/jurisdictions.json

  • trackers/state-legislation/watchlist.csv

unless you override them explicitly with environment variables.

Credentials

Optional provider keys can be supplied directly in the environment:

  • OPENSTATES_API_KEY

  • NYC_LEGISTAR_TOKEN

The server also supports an optional local secrets file. By default it looks for:

  • macOS: ~/Library/Application Support/openclaw/local-secrets.json

  • Linux: ${XDG_CONFIG_HOME:-~/.config}/openclaw/local-secrets.json

  • Windows: %APPDATA%\\openclaw\\local-secrets.json

Override that path with OPENCLAW_LOCAL_SECRETS.

Install or rotate stored credentials through protected stdin so values stay out of shell history:

node bin/install-credentials.mjs < /path/to/private-credentials.json
npm run credentials

Supported JSON keys:

{
  "openstatesApiKey": "provider-issued value",
  "nycLegistarToken": "provider-issued value"
}
  1. Call list_jurisdictions to choose the official route.

  2. Use scan_official_source, search_openstates_bills, or search_nyc_legistar_matters to gather leads.

  3. Record plausible official-source measures with record_discovery_candidate.

  4. Review each candidate and call review_candidate with accept or reject.

  5. Record official observations with record_measure_observation.

  6. Use get_due_reviews and get_exceptions for scheduled follow-up.

Tools

  • get_server_health

  • list_jurisdictions

  • scan_official_source

  • search_openstates_bills

  • search_nyc_legistar_matters

  • record_discovery_candidate

  • list_discovery_candidates

  • review_candidate

  • import_normalized_watchlist

  • list_watchlist

  • record_measure_observation

  • dedupe_watchlist_measures

  • record_exception

  • resolve_exception

  • get_due_reviews

  • get_exceptions

  • verify_event_log

Development

npm test
npm run smoke
npm run syntax

Available Tools

17 tools
dedupe_watchlist_measuresA

Remove duplicate watchlist rows while preserving append-only audit history and migrating any stored observations to the survivor measure.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYes
expected_revisionNo
survivor_measure_idYes
duplicate_measure_idsYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does communicate important non-obvious behavior: watchlist rows are removed, audit history is preserved, and any stored observations are migrated to the survivor measure. However, it does not explain concurrency implications of expected_revision, what happens to related records, or failure semantics, so transparency is partial.

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

Conciseness5/5

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

The description is a single, dense sentence that leads with the primary action and adds only necessary behavioral qualifiers. Every clause earns its place and there is no filler.

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

Completeness2/5

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

This is a destructive mutation tool with four undocumented parameters, no annotations, and no output schema. Although the description captures the core purpose and important invariants, it omits essential operational details such as what 'note' is for, how 'expected_revision' is used, what the result of a successful call looks like, and what validations or failure conditions may occur.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only hints at the meaning of survivor_measure_id and duplicate_measure_ids. It provides no guidance for the required 'note' parameter or for 'expected_revision', leaving the agent to guess their purpose and formatting.

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

Purpose5/5

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

The description uses a specific verb ('Remove') with a clear resource ('duplicate watchlist rows') and states the key defining behaviors: preserving append-only audit history and migrating observations to the survivor measure. This clearly distinguishes it from all listed sibling tools, none of which perform deduplication.

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

Usage Guidelines3/5

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

The description implies this tool is for consolidating duplicates on the watchlist, but it does not explicitly state when to use it, what preconditiones must hold, or which alternatives to consider. Since no sibling overlaps with this functionality, an agent can infer usage, but the guidance is implicit rather than explicit.

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

get_due_reviewsC

List active measures whose next-review date is due.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNo

TDQS

C2.7/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of explaining behavior. It discloses that the tool lists (implying read-only), but it does not explain how the as_of parameter affects the 'due' calculation, nor what 'active measures' means in this context.

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

Conciseness5/5

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

The entire description is one concise, front-loaded sentence with no filler. Every word contributes to understanding the core function.

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

Completeness2/5

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

Despite the low complexity of a single optional parameter, the description leaves critical details unexplained: the meaning of as_of, the definition of 'due', and the return format (no output schema exists). An agent could invoke the tool with the wrong date semantics as a result.

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

Parameters1/5

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

With 0% schema description coverage and a single undocumented as_of parameter, the description was expected to compensate, but it makes no mention of the parameter. The agent receives no information about allowed formats, defaults, or how as_of changes the result.

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 specifies a clear action ('List') and a specific resource ('active measures whose next-review date is due'), which is distinct from sibling tools like review_candidate or list_watchlist. However, it does not explicitly contrast itself with sibling list tools, so the 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 Guidelines2/5

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

The description provides no guidance on when to choose this tool over alternatives, nor does it mention any exclusions or prerequisites. It only states what the tool does, leaving the agent to infer the appropriate context from the resource name.

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

get_exceptionsB

List consolidated exceptions, optionally since an ISO datetime.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. 'List' and 'consolidated' communicate a read-only, likely grouped operation, which is useful. However, it does not disclose response structure, pagination, sorting, default time window, or any edge-case behavior, leaving transparency incomplete.

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

Conciseness5/5

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

The description is a single sentence with no filler. The core action and the optional filter are front-loaded, and every word contributes to understanding the tool.

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?

For a low-complexity optional-parameter list tool, the description captures the essential operation and parameter. However, with no output schema and no annotations, it omits any indication of the return shape or behavior when 'since' is omitted, leaving a modest 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?

The input schema exposes only a bare 'since' string with no description, and schema description coverage is 0%. The description compensates by specifying that the parameter is optional and expects an ISO datetime, adding format and requirement context beyond 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?

The description uses the specific verb 'List' and names the resource 'consolidated exceptions,' making the operation's intent clear. It is naturally distinct from sibling mutation tools like record_exception and resolve_exception, though it does not explicitly contrast any close read alternative.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this tool over alternatives such as get_due_reviews or resolve_exception. The phrase 'optionally since an ISO datetime' hints at time-filtered usage, but no exclusions, prerequisites, or alternative routing are provided.

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

get_server_healthB

Report monitor state and safety boundaries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Report' implies a read-only operation, but the description does not explicitly confirm that there are no side effects, nor does it explain what 'safety boundaries' means or what kind of response the agent can expect.

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 a single sentence with no filler and the key concepts are front-loaded. It is concise, though perhaps too terse to fully resolve ambiguity around 'monitor state'.

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

Completeness2/5

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

With no annotations and no output schema, the description needs to explain what the tool returns and what the terms mean. It merely names two output concepts without defining them, leaving an agent uncertain about the response shape and the precise meaning of 'safety boundaries'.

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

Parameters4/5

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

The tool has zero parameters, so the schema already fully documents the input surface. The description correctly focuses on the output domain instead of inventing parameter details. A baseline of 4 is appropriate for a no-parameter tool.

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 uses a clear verb ('Report') and names two distinct output topics: monitor state and safety boundaries. It is not a tautology, and the tool name reinforces the intent, though 'monitor state' is slightly ambiguous as to whether it refers to monitoring-system status or monitored server state.

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

Usage Guidelines2/5

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

There is no guidance about when to call this tool versus any alternative. No sibling tools are mentioned, and there is no context about prerequisite conditions or typical use cases, so an agent must infer usage from the name alone.

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

import_normalized_watchlistC

Idempotently seed the MCP from the workspace normalized watchlist CSV.

ParametersJSON Schema
NameRequiredDescriptionDefault
expected_revisionNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal idempotency and the CSV source, but it does not explain what side effects 'seed' has on existing data, whether data is replaced or merged, what happens on revision mismatch, or whether the workspace CSV must already exist.

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

Conciseness3/5

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

The description is a single sentence with no filler, and it front-loads the most important trait (idempotency). However, it is so terse that it omits critical operational details, so conciseness comes at the expense of usefulness.

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

Completeness2/5

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

Given the absence of annotations, output schema, and parameter descriptions, the tool description should compensate with richer context. It does not explain the meaning of 'expected_revision', the behavior on existing data, or what 'seeding the MCP' concretely changes in the system, so the agent cannot reliably predict the tool's effects.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention the 'expected_revision' parameter at all. The agent receives no explanation of what this integer means, why it matters, or how it relates to the idempotent seeding behavior, leaving the parameter effectively undocumented.

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 action ('seed') and a resource ('the MCP' from a 'normalized watchlist CSV'), and adds the key property 'idempotently'. It is clear this imports data from a workspace CSV, though it does not explicitly differentiate from sibling tools like list_watchlist or dedupe_watchlist_measures.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus the many sibling tools. There is no mention of prerequisites, whether this is for initial setup, or when it should be avoided in favor of alternatives such as record_measure_observation or dedupe_watchlist_measures.

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

list_discovery_candidatesB

List candidates by review status.

ParametersJSON Schema
NameRequiredDescriptionDefault
review_statusNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavior burden; 'List' implies a read-only operation, and the review-status filter is disclosed. However it does not state any default behavior when the parameter is omitted, ordering, or return format, so transparency is only partial.

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?

A single front-loaded sentence with no filler; it delivers the operation, resource, and filter in five words.

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?

For a one-optional-parameter list tool, the description covers the core operation, but with no output schema and no annotations, it leaves unspecified what the returned candidate objects look like and what happens when review_status is absent. It is minimally adequate, not complete.

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?

The description tells the agent that candidates are listed 'by review status', directly indicating the role of the single parameter, but it does not explain the enum values or the effect of omitting the parameter. The schema's enum provides the values, so a baseline of 3 is warranted.

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 clear verb ('List') and resource ('candidates') and adds the review-status filter, so an agent knows what the tool returns. It does not explicitly distinguish discovery candidates from sibling list_watchlist or get_due_reviews, but the resource name and status enum provide enough specificity.

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

Usage Guidelines2/5

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

No guidance is given about when to choose this tool over siblings such as get_due_reviews or list_watchlist, nor any exclusions or conditions. The filtering by review_status is implied but not tied to a concrete use case.

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

list_jurisdictionsC

List official source routes for all states and supported local jurisdictions.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNo

TDQS

C2.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It implies a read-only listing operation and states the default scope (all states and supported local jurisdictions). However, it does not disclose behavior such as how results are ordered, whether 'code' filters the list, or what errors or rate limits may apply, leaving some ambiguity.

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 a single, front-loaded sentence with no filler or redundant phrasing. It is concise and easy to parse. It could earn a 5, but it omits any mention of the 'code' parameter, making it slightly under-specified for the tool's interface.

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

Completeness2/5

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

Given the tool has an undocumented optional parameter, no output schema, and no guidance about alternative list tools, the description is not complete enough for an agent to use it reliably. It states the core purpose but leaves out parameter semantics and usage context, which are necessary for correct invocation.

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

Parameters1/5

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

The only parameter, 'code', has a 0% schema description coverage, and the description does not mention it at all. Since the schema provides no meaning for this parameter and the description fails to compensate, an agent cannot determine what values are valid or what effect it has on the results.

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 uses a specific verb ('List') and identifies a distinct resource: 'official source routes for all states and supported local jurisdictions.' This clearly indicates what the tool returns. However, it does not explicitly contrast with sibling tools like list_discovery_candidates, so it only partially differentiates.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no mentions of prerequisites such as whether a 'code' parameter is needed. The context signals show a sibling list tool (list_discovery_candidates), but the description does not help an agent decide between them.

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

list_watchlistC

List all or active monitored measures.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo
jurisdiction_codeNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. 'List' implies a read-only operation, but the description does not disclose the default value of active_only, whether jurisdiction_code narrows results, pagination behavior, or what the response contains. The behavioral profile is largely left to the agent to assume.

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 six-word sentence that is front-loaded with the verb and contains zero filler. The brevity is appropriate for a simple two-parameter list tool, though the space saved could have been reinvested in parameter semantics.

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

Completeness2/5

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

Key context is missing: the meaning of jurisdiction_code, the default behavior of active_only, and the expected return shape. Since there is no output schema and no annotations, the description should carry more of this burden itself, and it does not. The operation's simplicity prevents a score of 1, but an agent would still be guessing at essential call details.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for both parameters. 'All or active' maps usefully to active_only, but jurisdiction_code is never mentioned — its role, format, and whether it filters or is required are unexplained. The description only partially covers the parameter surface.

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 pairs a specific verb ('List') with a specific resource ('monitored measures') and adds a scope qualifier ('all or active'). This distinguishes it from sibling tools like list_discovery_candidates and get_due_reviews, which target different resources. It falls short of 5 only because it does not explicitly contrast itself with those siblings.

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

Usage Guidelines3/5

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

The description implies the usage context: when an agent needs to view monitored watchlist measures, this is the tool. However, it provides no explicit when-to-use rules, no exclusions, and no pointers to alternatives such as list_discovery_candidates or get_due_reviews, leaving agent routing to inference.

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

record_discovery_candidateA

Record a deduplicated candidate with an official measure URL for human review; does not add it to the watchlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
reasonNo
sessionYes
summaryNo
categoryNo
keywordsNo
bill_typeYes
bill_numberYes
source_typeYes
discovered_atNo
discovered_fromNo
latest_text_urlNo
expected_revisionNo
jurisdiction_codeYes
official_status_urlYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It meaningfully discloses that the tool does not modify the watchlist and that the recorded item is deduplicated and queued for human review. However, it does not explain duplicate-handling behavior, whether it is idempotent, or what happens after a candidate is recorded.

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

Conciseness5/5

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

The description is a single sentence that efficiently communicates the core action, purpose, deduplication behavior, and the important exclusion from the watchlist. Every clause earns its place with no redundancy.

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

Completeness2/5

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

Given the complexity of 15 parameters, 7 required fields, 0% schema description coverage, no output schema, and no annotations, this brief description is not sufficient for an agent to confidently construct a valid call. It orients the agent but leaves too many required fields and expected behaviors unexplained.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning for only one parameter implicitly ('official measure URL' maps to official_status_url) and does not clarify the remaining 14 parameters, many of which are required and lack property descriptions 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 uses a specific verb ('record'), a specific resource ('a deduplicated candidate'), and states the purpose ('for human review'). It also explicitly distinguishes itself from watchlist-related tools by noting it does not add the candidate to the watchlist.

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

Usage Guidelines3/5

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

The description implies this tool is for capturing candidate items that need human review rather than directly entering the watchlist, which gives useful context. However, it does not explicitly state when to choose this tool over alternatives such as review_candidate, record_measure_observation, or import_normalized_watchlist.

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

record_exceptionA

Record a retrieval, parsing, migration, or verification exception without treating it as a legal-status change.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
messageYes
measure_idNo
source_urlNo
observed_atNo
retry_afterNo
expected_revisionNo
jurisdiction_codeNo

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure, and it does add one important behavior: recording an exception does not alter legal status. However, it does not disclose persistence, side effects, idempotency, permissions, or response behavior, leaving significant gaps.

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

Conciseness5/5

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

The description is a single well-structured sentence with no filler. It front-loads the core behavior and adds the key scoping constraint about legal-status changes efficiently.

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

Completeness2/5

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

For an 8-parameter tool with no annotations, no output schema, and no parameter explanations, this description is too sparse. An agent would struggle to know what values belong in the optional fields or what the tool returns, despite understanding the overall intent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the 8 bare string parameters. It adds some meaning by implying what 'type' values may look like (retrieval, parsing, migration, verification), but it does not explain 'message', 'source_url', 'observed_at', 'retry_after', 'expected_revision', 'jurisdiction_code', or 'measure_id'.

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

Purpose5/5

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

The description uses a specific verb ('Record') with a clear resource ('exception') and enumerates the exception categories: retrieval, parsing, migration, or verification. It also distinguishes this from a legal-status change, which separates it from sibling tools like resolve_exception.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: for recording non-legal-status exceptions. It implies the tool should not be used for legal-status changes, though it does not explicitly name an alternative tool or provide a when-not-to-use list.

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

record_measure_observationB

Record an official-source observation, compute material field changes, and update the watch snapshot. Does not publish.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
currentYes
checked_atNo
measure_idYes
source_urlNo
retrieval_statusNo
expected_revisionNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden and does disclose three key behaviors: recording, computing field changes, and updating the watch snapshot, plus a non-publication side effect. It does not, however, explain side effects of expected_revision, error/rejection behavior, or the meaning of 'official-source observation' at the operation level.

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 short sentences, front-loaded with the action and containing no filler. Every clause adds a distinct behavioral fact.

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

Completeness2/5

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

This is a complex 7-parameter mutation with a nested 15-field object, no output schema, and no annotations; the two sentences do not equip an agent to form a correct invocation. Critical gaps include expected_revision's role, relationship to watch snapshot updates, and return or verification behavior.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to compensate by explaining key parameters such as expected_revision, current, and retrieval_status, but it mentions none. Property names in the schema provide some guessable meaning, yet the 7-parameter tool's crucial semantics—especially the nested 'current' object and revision guard—are left undocumented.

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

Purpose5/5

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

The description uses specific verbs—record, compute, update—against identifiable resources: an official-source observation, material field changes, and the watch snapshot. The closing 'Does not publish' distinguishes it from publishing or ingestion flows and clarifies its scope relative to sibling record_* tools.

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

Usage Guidelines2/5

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

It provides no explicit when-to-use guidance or alternatives; an agent must infer from the name that it is for observations. The only exclusion, 'Does not publish,' is a behavioral note, not a selection criterion among siblings like record_discovery_candidate or review_candidate.

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

resolve_exceptionA

Mark a previously recorded exception as resolved after a successful re-check or remediation.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolved_atNo
exception_idYes
resolution_noteYes
expected_revisionNo

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of describing behavioral effects. It indicates a state change but does not disclose details such as whether expected_revision is used for concurrency, whether resolved_at is auto-set or user-supplied, whether the operation is idempotent, or what happens on failure.

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

Conciseness5/5

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

The description is a single declarative sentence, front-loaded with the verb and object, and contains no filler or repetition. It is appropriately sized for the amount of information it conveys.

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

Completeness2/5

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

With four parameters, no annotations, and no output schema, this description is too thin for an agent to invoke the tool reliably. It omits parameter-level semantics, behavioral side effects, confirmation/return behavior, and failure conditions, leaving important decisions to guesswork.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the parameters beyond the generic idea of an exception. The purpose of expected_revision is non-obvious, and resolved_at's behavior is unstated. The description provides minimal contextual help but does not compensate for the missing schema documentation.

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

Purpose5/5

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

The description uses a specific verb ('Mark... as resolved') and identifies the resource ('a previously recorded exception') plus the qualifying condition ('after a successful re-check or remediation'). This clearly distinguishes it from sibling tools like record_exception, which creates exceptions, and get_exceptions, which reads them.

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

Usage Guidelines4/5

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

The description states when the tool is appropriate: after a successful re-check or remediation. It implicitly places this tool after record_exception and gives concrete timing context, but it does not explicitly name alternatives or state 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.

review_candidateA

Explicitly accept or reject a candidate. Acceptance requires a normalized watch entry and is the only candidate-to-watchlist path.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYes
decisionYes
reviewed_byYes
watch_entryNo
candidate_idYes
expected_revisionNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that acceptance requires a normalized watch entry even though watch_entry is not a required field in the schema, and it reveals that this tool is the exclusive route from candidate to watchlist. It does not cover behavior such as rejection effects, expectd_revision semantics, or idempotency, but what it states is material and non-obvious.

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 concise sentences with no filler. The core action is front-loaded and the key constraint follows immediately, making the description easy to parse quickly.

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

Completeness2/5

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

The tool has six parameters including a complex nested watch_entry object, no annotations, and no output schema, yet the description omits important operational details such as expected_revision semantics, reject side effects, what the response contains, and how to construct a normalized watch entry. It gives a starting point but is not complete enough for an agent to call reliably in all cases.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter meaning. It partially explains watch_entry by tying it to acceptance and implicitly clarifies decision via accept/reject wording. However, it does not explain candidate_id, reviewed_by, note, expected_revision, or the structure and purpose of the nested watch_entry fields.

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

Purpose5/5

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

The description uses a specific verb-resource pair: 'Explicitly accept or reject a candidate.' It also distinguishes this tool from siblings by stating it is 'the only candidate-to-watchlist path,' so an agent can tell it apart from record_discovery_candidate or list_discovery_candidates.

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

Usage Guidelines4/5

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

The description provides clear usage context: this is where a candidate decision is made. It also gives a key prerequisite: 'Acceptance requires a normalized watch entry.' It does not explicitly enumerate when not to use it, but 'only candidate-to-watchlist path' strongly implies the appropriate selection among sibling tools.

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

scan_official_sourceB

Retrieve one explicit public official-source URL and return keyword matches and candidate links. Results are leads, not verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
termsNo
timeout_msNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It nicely sets expectation that output is unverified leads, but it does not mention side effects, network/failure behavior, or output structure. Transparency is partial.

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 short sentences with the action and output front-loaded, plus a high-value caveat. Every sentence earns its place and there is no filler.

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?

For a tool with no output schema and no annotations, the description gives a minimal but usable mental model: provide a URL and get matches/links as leads. It omits output shape, timeout semantics, and possible side effects, leaving some uncertainty for correct invocation and result interpretation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It conveys that `url` is the official-source target and hints that `terms` is used for keyword matching, but it does not define optionality/format of `terms` or the meaning of `timeout_ms`.

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 identifies a specific task: take one explicit public-official-source URL and return keyword matches plus candidate links. It implies a narrower scope than discovery or search siblings, though it does not explicitly name an alternative tool.

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 line 'Results are leads, not verification' sets a clear boundary for how the output should be used. However, the description does not explicitly say when to prefer this tool over sibling search or discovery tools, nor does it describe optional-parameter usage.

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

search_nyc_legistar_mattersB

Search the official NYC Legistar matters API for discovery leads. Results must still be verified against the official matter page or enacted local law before watchlist acceptance.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
topNo
bodyNo
limitNo
statusNo
order_byNo
timeout_msNo
matter_typeNo
passed_sinceNo
introduced_sinceNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It does add a useful behavioral caveat: results must still be verified against the official matter page or enacted local law before acceptance. However, it does not mention authentication, rate limits, pagination, or output shape, which limits transparency for a search tool hitting an external API.

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 concise, with two short sentences; the core purpose is front-loaded and the verification caviat is placed second. Every sentence earns its place, though the brevity leaves out important parameter and usage details.

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

Completeness2/5

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

For a tool with 10 optional parameters, no output schema, and no annotations, the description is under-specified. It explains the high-level purpose and reliability caveat but omits essential invocation details such as query syntax, filter semantics, return value shape, and error behavior. An agent would struggle to use all available parameters correctly.

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

Parameters1/5

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

The input schema has 10 parameters with 0% description coverage, and the tool description provides no explanation of any parameter. It does not clarify what 'q' expects, how filters like status, matter_type, passed_since, or introduced_since behave, what formats are accepted, or how limit/top/timeout_ms interact. The description adds essentially no meaning beyond the bare parameter names.

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 the specific action 'Search' the 'official NYC Legistar matters API' and ties it to 'discovery leads', which clearly identifies what the tool does. It does not explicitly name sibling tools like search_openstates_bills, but the NYC/Legistar scoping makes the resource distinct enough.

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

Usage Guidelines4/5

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

The phrase 'for discovery leads' gives clear context about when this tool is appropriate, and the second sentence warns that results are not final and must be verified before watchlist acceptance. It does not explicitly describe exclusions or alternatives, but the use case is reasonably clear.

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

search_openstates_billsA

Search Open States v3 for discovery leads. Results never count as final verification and must be pivoted back to official sources before watchlist acceptance.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
pageNo
sortNo
chamberNo
includeNo
sessionNo
subjectNo
per_pageNo
identifierNo
timeout_msNo
action_sinceNo
jurisdictionNo
created_sinceNo
updated_sinceNo
classificationNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It meaningfully discloses that results are unverified leads and must be checked against official sources before acceptance. It also identifies the external data source, though it doesn't cover output format, pagination behavior, or rate limits.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the main action and follows with the critical caveat, making efficient use of limited space.

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

Completeness2/5

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

This is a 15-parameter tool with no required parameters, no output schema, and no parameter descriptions. The current description only establishes the source and the discovery caveat; it is insufficient for an agent to confidently construct valid queries or interpret results.

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

Parameters2/5

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

Schema description coverage is 0%, and the description adds no parameter-level guidance. Some parameters like sort and include are partially self-explanatory through enums, but many others such as classification, action_since, jurisdiction, and identifier lack format or value guidance, leaving the agent to guess.

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 Open States v3') and a clear intended purpose ('for discovery leads'). This distinguishes it from sibling tools like scan_official_source and search_nyc_legistar_matters, which target different sources or verification workflows.

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

Usage Guidelines4/5

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

The description explicitly frames when this tool is appropriate: it is for discovery only, not final verification, and results must be pivoted back to official sources before watchlist acceptance. This gives clear context and an implicit exclusion, though it does not name an alternative sibling tool explicitly.

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

verify_event_logA

Replay the append-only event log and compare it with the stored snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses the core mechanism—replaying the log and comparing it—which implies a read-only integrity check. However, with no annotations provided, it leaves unstated what happens on mismatch, what the return value is, and whether any state is written.

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?

A single clear sentence, front-loaded with the action verb and containing no filler. Every word contributes to understanding the operation.

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?

The tool is low-complexity with no parameters and no output schema, so the description is usable. Still, without annotations or output schema, an agent is left guessing about the result format and whether this verification has side effects or should be run under specific conditions.

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

Parameters4/5

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

The tool has zero parameters and schema description coverage is 100%, so there is nothing for the description to add. The baseline of 4 applies because parameter semantics are fully trivially satisfied.

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 ('Replay'), the exact resource ('append-only event log'), and the comparison target ('stored snapshot'). None of the sibling tools overlap with this operation, so an agent can clearly distinguish it.

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

Usage Guidelines2/5

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

There is no guidance on when to run this tool, what prerequisites might exist, or what alternatives should be considered. An agent would have to infer from the name that this is an integrity-check operation.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 17 tool updatesv0.1.0
    • First observeddedupe_watchlist_measures
    • First observedget_due_reviews
    • First observedget_exceptions
    • First observedget_server_health
    • First observedimport_normalized_watchlist
    • First observedlist_discovery_candidates
    • First observedlist_jurisdictions
    • First observedlist_watchlist
    • First observedrecord_discovery_candidate
    • First observedrecord_exception
    • First observedrecord_measure_observation
    • First observedresolve_exception
    • First observedreview_candidate
    • First observedscan_official_source
    • First observedsearch_nyc_legistar_matters
    • First observedsearch_openstates_bills
    • First observedverify_event_log

TDQS

B3.3/5.0
Disambiguation5/5

Each tool is scoped to a distinct workflow stage or data type: discovery candidates, watchlist measures, exceptions, health, and audit. Search tools are source-specific, and state/verification boundaries are clearly described, so an agent should rarely select the wrong tool.

Naming Consistency4/5

All tool names are snake_case verb_noun and generally predictable. Minor inconsistency exists between list_* and get_* for similar collection-style operations, but the pattern is still coherent and readable.

Tool Count4/5

Seventeen tools is on the heavier side, but the count is justified by the broad legislation-monitoring workflow: discovery, candidate review, watchlist management, observations, exceptions, and audit. The scope feels intentional rather than padded.

Completeness4/5

The server covers the major lifecycle stages from discovery through watchlist observation and exception handling, with strong audit support. Minor gaps exist, such as no explicit watchlist removal/deactivation tool and no publish step despite observations being non-publishing.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An append-only research operations framework and read-only MCP that tracks research plans, approvals, observations, claims, failures, revisions, and contributions with source-grounded evidence, providing search, evidence fetch, and audit capabilities without direct ledger writes.
    30
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to perform deterministic data intake pipelines for FOIA and public comments, with medallion warehouse, PII policy enforcement, and verified insights.
    Apache 2.0
  • A
    license
    B
    quality
    C
    maintenance
    Enables revision-bound source audits with exact article fingerprinting, claim-to-source mapping, quotation verification, and immutable JSON evidence reports for prepublication review.
    9
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kwgoodwin/clearon-legislation-monitor-mcp'

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