Skip to main content
Glama
kwgoodwin

AI Legal Watch MCP

by kwgoodwin

AI Legal Watch MCP

MCP server for append-only maintenance of an AI legal developments tracker stored as CSV.

It validates candidate rows, checks for duplicates, preserves historical CSV formatting, and helps rank possible article candidates without directly browsing or judging legal authority.

What it does

  • Reads a tracker CSV and exposes filtered list/digest views

  • Dry-runs candidate additions before writing anything

  • Appends exactly one approved row when the tracker fingerprint still matches

  • Uses a lock to prevent duplicate concurrent appends

  • Suggests article candidates with transparent scoring

Related MCP server: cv-builder

What it does not do

  • It does not browse the web or verify the legal source for you

  • It does not rewrite existing tracker history

  • It does not silently merge or normalize old rows beyond tolerated legacy repairs

  • It does not require a content archive, though it can fail open when one is configured

Requirements

  • Node.js 20 or newer

  • A local MCP client that can launch a stdio server

Installation

cd tools/ai-legal-watch-mcp
npm install
npm test
npm run smoke

MCP client setup

Example stdio configuration:

{
  "mcpServers": {
    "ai-legal-watch": {
      "command": "node",
      "args": ["/absolute/path/to/ai-legal-watch-mcp/server.mjs"],
      "env": {
        "AI_LEGAL_WATCH_WORKSPACE": "/absolute/path/to/workspace"
      }
    }
  }
}

The tracker defaults to ai-legal-watch-tracker.csv in the chosen workspace. Override it with AI_LEGAL_WATCH_TRACKER if needed.

If you want candidate suggestion to exclude already-covered rows using a local content archive, set AI_LEGAL_WATCH_ARCHIVE_ROOT or CLEARON_CONTENT_ARCHIVE_ROOT.

Safety model

  • propose_tracker_update never writes

  • apply_tracker_update appends only one encoded CSV row and requires the exact SHA-256 fingerprint returned by the proposal

  • The tracker lock, fingerprint check, and duplicate check are all repeated while the lock is held

  • Existing rows are not reserialized, preserving tolerated historical formatting quirks

  • New rows must use legal classifications, not publication workflow labels

Tools

  1. list_watch_items

  2. find_duplicate_development

  3. propose_tracker_update

  4. apply_tracker_update

  5. generate_watch_digest

  6. suggest_article_candidates

Example workflow

  1. Call find_duplicate_development with the topic, development date, and official source URL.

  2. Call propose_tracker_update with the full candidate row.

  3. Verify the underlying primary source and legal classification outside this MCP.

  4. Call apply_tracker_update with the exact tracker_sha256 and unchanged candidate.

  5. If the fingerprint is stale, generate a fresh proposal instead of retrying an old payload.

Development

npm test
npm run smoke
npm run syntax

Available Tools

6 tools
apply_tracker_updateB

Append an approved proposal if the tracker fingerprint and proposal fingerprint still match and no duplicate exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidateYes
tracker_sha256Yes
proposal_sha256Yes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden and does convey the key conditional behavior: the append occurs only when the two fingerprints match and no duplicate exists. It does not disclose what happens on mismatch/duplicate (error vs no-op), return value, or side effects beyond append.

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 sentence that is front-loaded with the action and quickly states the two guarding conditions. There is no filler or repetition of schema content.

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 a required nested candidate object, zero annotations, and no output schema, the description is too minimal to fully support a correct call. It explains neither candidate semantics nor expected outcomes for failed checks, and does not place the tool in the propose/apply workflow beyond 'approved'.

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 only loosely maps tracker_sha256 and proposal_sha256 to 'tracker fingerprint' and 'proposal fingerprint'. The candidate object, which is complex and required, receives no explanation of its fields or how it relates to an approved proposal.

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 conditional operation: appending an approved proposal, guarded by fingerprint matching and duplicate checking. The phrase 'approved proposal' hints at distinction from propose_tracker_update, though it does not name the sibling explicitly.

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?

Implies this tool is for applying already-approved proposals, and the stated match/no-duplicate conditions describe when the append can happen. However, it never tells an agent when to choose this over propose_tracker_update or the other siblings, leaving the selection largely implicit.

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

find_duplicate_developmentB

Check for blocking duplicates and related-source warnings before proposing an update.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
item_dateYes
source_urlYes

TDQS

B3/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 indicates a checking action, but does not say whether the tool is read-only, what it returns, how blocking is signaled, or what side effects (if any) occur. This is a significant transparency gap for a tool with no annotation support.

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 words. It is concise and readable, but it is somewhat under-specified for a tool with three undocumented required parameters and no output schema, so it is not perfectly 'appropriately sized'.

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 definition is too thin for reliable invocation. It gives a purpose and timing but leaves critical unknowns: what constitutes a 'blocking' duplicate, what warnings look like, what the function returns, and how the parameters should be supplied and interpreted.

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 coverage is 0% and the description does not mention any of the three required parameters (topic, item_date, source_url). An agent cannot determine expected formats, how each parameter contributes to duplicate detection, or why all three are required. The description adds no parameter-level meaning beyond the bare schema 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 clearly identifies the action ('Check for blocking duplicates and related-source warnings') and frames it as a pre-update step, which distinguishes it from siblings like propose_tracker_update and apply_tracker_update. It is not a tautology and adds meaningful specificity, though terms like 'blocking' and 'related-source warnings' are not fully defined.

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 contextual placement: use this before proposing an update. This implies the tool is a prerequisite check for propose_tracker_update. However, it does not explicitly state when not to use it or name alternatives, so it falls short of fully explicit routing.

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

generate_watch_digestC

Summarize tracker entries checked or dated since a YYYY-MM-DD date.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNo

TDQS

C2.7/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 behavioral burden. It adds one useful nuance — entries are included if 'checked or dated' since the date — but does not disclose whether the call has side effects (read-only vs generating/storing output), the output shape, or how the summary is computed.

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 front-loaded sentence with no filler; every word contributes. It is appropriately sized for a two-parameter tool, though slightly under-specified rather than merely concise.

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 omits critical context: whether this is a safe read operation, what the returned digest looks like, and how it relates to list_watch_items. For a tool with two optional params and five siblings, these gaps are material.

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 explain both parameters. It clarifies 'since' as a YYYY-MM-DD date filter, but 'limit' is never mentioned and remains semantically undefined.

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 ('Summarize') and resource ('tracker entries') with a clear date-scoped filter ('since a YYYY-MM-DD date'). It is distinguishable from siblings whose verbs differ (list, find, suggest, propose, apply), though 'summarize' leaves unspecified what the digest actually contains.

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 on when to choose this tool over list_watch_items or other siblings. The date filter weakly implies a use case (recent summaries), but no alternatives, exclusions, or contextual triggers are mentioned.

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

list_watch_itemsB

List tracker items with optional filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
topicNo
sourceNo
statusNoExact clearon_status value. Historical tracker rows may use workflow labels as well as legal classifications.
priorityNo
next_actionNo

TDQS

B3.1/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 disclosing behavior. It only says 'List ... with optional filters', which implies a read operation but does not explain filter matching semantics (exact vs partial, AND vs OR), default limit, ordering, pagination, or what fields are returned for each item.

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, front-loaded sentence with no filler or repetition. It communicates the core operation ('List tracker items') and the key qualifier ('optional filters') 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?

Given six optional parameters, no output schema, and no annotations, this one-line description is insufficient for confident invocation. It does not describe return shape, how filters combine, or any defaults, so an agent would need to infer or probe 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 only 17%, with only `status` having a description. The description's phrase 'optional filters' adds minimal meaning beyond the schema's required-fields list, and does not explain `limit`, `topic`, `source`, `priority`, or `next_action` semantics.

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 ('List') and a clear resource ('tracker items'), immediately distinguishing it from sibling tools that generate, propose, or apply updates. It also signals that filtering is available, giving a concise statement of the tool's core function.

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 use this tool versus siblings like generate_watch_digest, propose_tracker_update, or suggest_article_candidates. The only usage signal is the verb 'List', which is implied by the name, so the agent gets little help selecting among related options.

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

propose_tracker_updateB

Validate and dry-run an append-only tracker update without changing the CSV.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesYes
topicYes
sourceYes
priorityYes
item_dateYes
source_urlYes
next_actionYes
checked_at_etYes
clearon_statusYesChoose the most advanced applicable procedural classification. Definitions: allegation: A reported or asserted claim that has not been adjudicated and is not better classified by a filed complaint. investigation: An announced inquiry or compulsory information-gathering process without a filed enforcement complaint. complaint filed: A civil, administrative, or enforcement complaint has been filed; allegations remain unproven. preliminary ruling: A non-final judicial ruling, including a preliminary injunction or interlocutory order. final holding: A final merits holding by the deciding court, subject to any stated appeal posture. appeal pending: An appeal has been filed or officially docketed and remains unresolved. proposed legislation: A legislative proposal has been announced or published but has not been formally introduced as a pending bill. pending bill: A bill has been formally introduced and has not been enacted or finally rejected. enacted law: Legislation has completed enactment; note effective dates separately. proposed regulation: A proposed rule or formal rulemaking text is open or pending and is not yet final. final regulation: A regulation has been finally adopted; note publication and effective dates separately. guidance: Official nonbinding or interpretive agency guidance. court rule: A formally adopted rule governing court procedure or practice. professional responsibility: A formal ethics or professional-responsibility development not better classified as a court rule. enforcement order: A final agency or court enforcement order, excluding a negotiated settlement. settlement: A consent order, settlement, or negotiated resolution without a litigated final holding.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the most important behavioral trait — that the CSV is not modified — and the append-only data model constraint. However, it does not disclose what happens on validation failure, whether any side effects occur at all, or what the tool returns, which are material for a validation tool.

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

Conciseness4/5

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

The description is a single efficient sentence with the critical non-mutation fact front-loaded. Every word earns its place, though 'validate' and 'dry-run' slightly overlap in meaning.

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 9-parameter validation tool with no output schema and no annotations, the description is too thin. An agent calling this correctly needs to know expected formats (timestamps, dates), what validation failure looks like, the shape of the returned proposal, and whether anything else is persisted. Only the no-CSV-change guarantee is covered.

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 only 11%, and the tool description adds nothing about the 9 required parameters. Only clearon_status has in-schema definitions; the other 8 parameters (checked_at_et, item_date, source_url, etc.) have bare types with no format, syntax, or example guidance. With coverage this low, the description was obligated to compensate and does not.

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 ('validate and dry-run'), a specific resource ('append-only tracker update'), and the key constraint ('without changing the CSV'). It is clearly distinguishable from the sibling apply_tracker_update, which would be the tool that actually writes the change.

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 dry-run framing implies this tool is the pre-flight check before apply_tracker_update, but the description never states that explicitly, never names the alternative, and gives no when-to-use vs when-not-to-use guidance. Usage is only implied by the 'dry-run' wording.

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

suggest_article_candidatesC

Rank tracker entries as possible Clearon article candidates using transparent heuristics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_publishedNo

TDQS

C2.7/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. It mentions 'transparent heuristics' but does not explain what behavior this implies, whether the operation is read-only, what ranking criteria are used, or how results are ordered.

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 focused sentence with no filler. It front-loads the core action and purpose, though brevity comes at the cost of parameter and usage detail.

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 no annotations, no output schema, and no parameter documentation, the description is too thin. An agent cannot confidently determine output behavior, parameter semantics, or how this tool differs from closely related proposal tools.

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 meaning for 'limit' or 'include_published'. The parameter names are somewhat self-explanatory, but the description does not clarify defaults, allowed ranges, or what 'include_published' actually includes.

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 ('Rank') with a clear resource ('tracker entries') and outcome ('possible Clearon article candidates'). It is understandable and distinguishable from most siblings, though it doesn't explicitly contrast it with propose_tracker_update.

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 use this tool versus alternatives such as propose_tracker_update or list_watch_items. The phrase 'using transparent heuristics' hints at intent but does not explain when an agent should choose this over sibling tools.

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. 6 tool updatesv0.1.0
    • First observedapply_tracker_update
    • First observedfind_duplicate_development
    • First observedgenerate_watch_digest
    • First observedlist_watch_items
    • First observedpropose_tracker_update
    • First observedsuggest_article_candidates

TDQS

A3.5/5.0
Disambiguation5/5

Each tool addresses a distinct stage of the workflow: listing, duplicate-checking, digest generation, candidate ranking, proposal dry-run, and final append. There is no meaningful overlap or likely misselection between tools.

Naming Consistency4/5

All tool names use snake_case and an action-first style, which is consistent and predictable. The only minor deviation is that 'find_duplicate_development' is less immediately readable and its noun phrase is somewhat awkward, but it still follows the same pattern.

Tool Count5/5

Six tools is a well-scoped size for this domain. The set covers the full workflow without redundant utilities or unnecessary complexity.

Completeness5/5

The tools cover reading, analyzing, summarizing, ranking, proposing, and applying updates. The append-only nature is intentional and enforced, so the absence of update or delete tools is not a gap.

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

  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides MCP tools for managing a CV as structured content, including a SQLite-backed snippet library with tools to list, create, update, and match job postings, compose role-tailored CV variants, and manage drafts.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local-first LinkedIn workspace that turns your own documents, CVs, repositories, and exports into a verifiable claim ledger and evidence-backed canonical profile, enabling evidence import, claim verification, profile patching, post drafting, content planning, analytics, and publication approvals through MCP tools — all stored locally in SQLite with an optional human-review dashboard.
    15
    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/ai-legal-watch-mcp'

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