Skip to content

GovGazette

by mooshee · remote · no sign-in to list tools · v1.3.1 · published by GitHub user mooshee

Find federal opportunities, research awards and vendors, and review dated exclusion evidence.

Deletes · 3Changes · 4

17 tools: 3 can delete or cancel things, 4 change things and 10 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http govgazette https://govgazette.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "rotate_saved_search_feed" destructive (destructiveHint: true), and its name says "search", a word for reading.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}; The name "rotate_saved_search_feed" says "search": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Deletes or cancels 3Claude Code: deny
  • delete_saved_search_workspacePermanently delete the authenticated private saved-search workspace and all its searches, baselines, change events and feed links.No findings

    Why it is in this group

    • The name "delete_saved_search_workspace" says "delete": a word for removing or ending something.
    • The description says "Permanently delete".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Permanently delete the authenticated private saved-search workspace and all its searches, baselines, change events and feed links. Requires explicit user intent to delete the entire workspace. Does not delete the GovGazette login account, public records or another workspace.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • rotate_saved_search_feedReplace the private feed link for one saved search owned by the authenticated workspace, immediately revoking its previous link.1 finding

    Why it is in this group

    • The name "rotate_saved_search_feed" says "search": a word for reading.
    • The description's first verb is "replace": a word for a change.
    • The description says "cannot be recovered".
    • The server marks it destructive (destructiveHint: true).

    Findings

    • Warn

      The server marks "rotate_saved_search_feed" destructive (destructiveHint: true), and its name says "search", a word for reading.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}; The name "rotate_saved_search_feed" says "search": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Replace the private feed link for one saved search owned by the authenticated workspace, immediately revoking its previous link. Requires explicit user intent. Does not delete the search or its events. Keep the replacement link private; a lost response may mean the link changed and cannot be recovered by listing searches.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Changes things 4Claude Code: ask
  • check_exclusionsCheck 1 to 20 identities against a dated active SAM snapshot.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Check 1 to 20 identities against a dated active SAM snapshot. Pass identities as an array of objects, not a record ID or page URL. Each identity needs a name, UEI, CAGE, or NPI. Exact identifier matches and name-only possible matches remain distinct. Read coverage.freshness; stale or unknown-source empty lookups report unavailable with snapshot_status no_match_in_snapshot. No match is not clearance.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • freshnessReport actual source dates, coverage, record counts and SHA256 provenance.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Report actual source dates, coverage, record counts and SHA256 provenance.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • research_opportunityBuild a cited research brief with retained notice requirements, exact award-number candidates and same-industry comparisons.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Build a cited research brief with retained notice requirements, exact award-number candidates and same-industry comparisons. Does not infer an incumbent or eligibility.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 10Claude Code: allow
  • detailRetrieve a public record using the exact collection and id returned by search, never a page URL, title or slug.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "retrieve": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "retrieve" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Retrieve a public record using the exact collection and id returned by search, never a page URL, title or slug. Supply the returned generation for a consistent result.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • documentRead official record text using the exact collection, id and generation returned by search.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.

    What it can reach

    • private-dataThe name "document" says "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Read official record text using the exact collection, id and generation returned by search. Start at offset 0 with length 1 to 16,000 characters, then use next_offset unchanged for the next chunk. Does not fetch arbitrary URLs or paths.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • exclusion_changesCompare two retained snapshots.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "compare": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Compare two retained snapshots. No longer observed does not mean reinstated; enrichment-only changes are excluded.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • exclusion_contextRetrieve an exclusion with agency explanation, named restriction references, source evidence, explicit source-age warnings and supported business links.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "retrieve": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Retrieve an exclusion with agency explanation, named restriction references, source evidence, explicit source-age warnings and supported business links.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • explain_matchExplain deterministic primary NAICS overlap between a registered vendor and opportunity.Reads text others writeNo findings

    Why it is in this group

    • The name "explain_match" says "explain": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Explain deterministic primary NAICS overlap between a registered vendor and opportunity. Not an eligibility determination.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_saved_search_eventsRead the latest 100 retained change observations for one saved search owned by the authenticated private workspace.No findings

    Why it is in this group

    • The name "get_saved_search_events" says "get": a word for reading.
    Description, as the server wrote it
    Read the latest 100 retained change observations for one saved search owned by the authenticated private workspace. Does not change the search. Retention and missing intermediate observations are explicit; observations are not proof of delivered notifications.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_saved_searchesList the saved opportunity searches in the authenticated private workspace, including criteria, status and change counts.No findings

    Why it is in this group

    • The name "list_saved_searches" says "list": a word for reading.
    Description, as the server wrote it
    List the saved opportunity searches in the authenticated private workspace, including criteria, status and change counts. Does not change searches. Requires workspace Authorization headers on /mcp or account OAuth on /account/mcp; never accept keys in tool arguments.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_exclusionsFilter active exclusion records by agency, program, classification, geography and dates.Reads text others writeNo findings

    Why it is in this group

    • The name "search_exclusions" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Filter active exclusion records by agency, program, classification, geography and dates. Limit is a maximum; large records can produce a smaller page with page_size_limited true. Continue with next_cursor and unchanged filters and limit. Preserve generation and read coverage.freshness for source age and warnings; results are dated evidence, not clearance.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • search_opportunitiesFind official opportunity records by keywords, industry, set-aside, state, agency and source status.Reads text others writeNo findings

    Why it is in this group

    • The name "search_opportunities" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Find official opportunity records by keywords, industry, set-aside, state, agency and source status. Active does not imply the deadline is open.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data1
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write11
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Install

Pinned to version 1.3.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http govgazette https://govgazette.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__govgazette__detail",
      "mcp__govgazette__document",
      "mcp__govgazette__exclusion_changes",
      "mcp__govgazette__exclusion_context",
      "mcp__govgazette__explain_match",
      "mcp__govgazette__get_saved_search_events",
      "mcp__govgazette__list_saved_searches",
      "mcp__govgazette__search",
      "mcp__govgazette__search_exclusions",
      "mcp__govgazette__search_opportunities"
    ],
    "ask": [
      "mcp__govgazette__check_exclusions",
      "mcp__govgazette__create_saved_search",
      "mcp__govgazette__freshness",
      "mcp__govgazette__research_opportunity"
    ],
    "deny": [
      "mcp__govgazette__delete_saved_search",
      "mcp__govgazette__delete_saved_search_workspace",
      "mcp__govgazette__rotate_saved_search_feed"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as govgazette. Review it before you use it.

Capability tags behind 11 rules
  • mcp__govgazette__check_exclusions untrusted-input
  • mcp__govgazette__detail untrusted-input
  • mcp__govgazette__document private-data, untrusted-input
  • mcp__govgazette__exclusion_changes untrusted-input
  • mcp__govgazette__exclusion_context untrusted-input
  • mcp__govgazette__explain_match untrusted-input
  • mcp__govgazette__freshness untrusted-input
  • mcp__govgazette__research_opportunity untrusted-input
  • mcp__govgazette__search untrusted-input
  • mcp__govgazette__search_exclusions untrusted-input
  • mcp__govgazette__search_opportunities untrusted-input