Skip to main content
Glama
georgecurta

anonym-community-mcp

by georgecurta

anonym-community-mcp

Read-only Model Context Protocol server for the anonym.community privacy research corpus — 1,478 documented PII/privacy pain points, 98 structural root causes, a 240-jurisdiction privacy-law directory, 134 evidence-backed FAQ answers, and 1,600+ cited academic papers, queryable directly from Claude Desktop, Claude Code, Cursor, or any MCP client.

License: MIT Node.js >= 18 Self-test MCP

Why this exists

All of this is already public as HTML and JSON at anonym.community, but an agent trying to answer "which EU jurisdictions have a data protection authority and what law applies" has to crawl and re-derive that from prose every time. This server exposes the same corpus as typed, queryable tools, so an agent can ask precisely and cite exactly — pain point IDs, jurisdiction records, FAQ entries and paper DOIs, not paraphrased HTML.

Related MCP server: Cairn

What it exposes

Tool

Data

Use it for

search_pain_points

1,478 documented PII/privacy problems

"what goes wrong with X"

list_structural_drivers

98 irreducible root causes

"why does this keep happening"

lookup_jurisdiction

240 jurisdictions, DPAs, legislation

"is there a privacy law in X"

search_faq

134 evidence-backed Q&As

direct practitioner questions

search_research_papers

1,600+ academic papers with DOIs

"cite a primary source"

get_corpus_stats

counts, valid filter values, data freshness

call first to discover valid track/region values

Every result carries its identifiers and source links, so an answer can be cited back to a specific pain point, driver, jurisdiction, FAQ entry or DOI.

Install

Claude Desktop / Claude Code

Add to your MCP config (claude_desktop_config.json, or .mcp.json in a project):

{
  "mcpServers": {
    "anonym-community": {
      "command": "npx",
      "args": ["-y", "github:georgecurta/anonym-community-mcp"]
    }
  }
}

No install step, no clone, no local path. npx fetches and runs it on demand.

If you'd rather run a pinned local copy:

git clone https://github.com/georgecurta/anonym-community-mcp.git
{
  "mcpServers": {
    "anonym-community": {
      "command": "node",
      "args": ["/absolute/path/to/anonym-community-mcp/index.js"]
    }
  }
}

Cursor / other MCP clients

Same shape — the server speaks stdio JSON-RPC, the MCP default. No port, no credentials, nothing to host.

Verify it works

node index.js --selftest

Runs 7 assertions against the live corpus (not fixtures) and exits non-zero on failure. Expected output ends with 7 passed, 0 failed.

Manual protocol check:

printf '%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | node index.js

Example

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
  "name":"search_pain_points",
  "arguments":{"query":"data broker opt-out","limit":2}
}}

returns matched pain points with title, evidence, severity, structural driver track, category and source citations — ready to quote, not to re-summarize.

Architecture

Live, not bundled. The server fetches https://anonym.community/data/*.json — the same files the website itself is built from — at startup, caches in memory, and refreshes on a TTL (stale-while-revalidate: a request just after the TTL expires gets the cached answer immediately while a background fetch updates the cache for the next one). The corpus this server answers from is never more than ANONYM_MCP_TTL_MS (default 30 minutes) old, with no sync step to remember and no risk of a stale local snapshot drifting from the live site.

Env var

Default

Purpose

ANONYM_MCP_BASE_URL

https://anonym.community

Point at a staging mirror instead

ANONYM_MCP_TTL_MS

1800000 (30 min)

How long a cached fetch is served before refreshing

Read-only by construction. There are no write tools, no filesystem writes and no network calls other than the GET requests above. Data is fetched, held in memory, and never mutated — locally or remotely. The server has no code path that could alter the site, so it cannot be talked into doing so.

stdio, not HTTP. A hosted HTTP/SSE endpoint would make the corpus reachable by remote agents, but it also means another public service to patch and rate-limit. stdio gives the same query capability with no attack surface and no operational burden. handle(name, args) is exported and transport-agnostic if a hosted endpoint is ever wanted — wrap it, don't rewrite it.

No SDK. The MCP subset actually needed here — initialize, tools/list, tools/call — is implemented directly against the JSON-RPC 2.0 spec, so the repo has zero runtime dependencies beyond Node's own fetch.

Data license

The code in this repository is MIT-licensed (see LICENSE). The corpus it queries — anonym.community's pain points, structural drivers, jurisdictions, FAQ and paper citations — is published separately under CC-BY-4.0 by curta.solutions. Attribute the source when citing results.

anonym.legal

The product most directly related to this repo. anonym.legal is a cloud/desktop PII anonymization platform (267+ entity types, 48 languages, Zero-Knowledge architecture) built on the same research this corpus documents — and it ships its own MCP server (7 tools for Claude Desktop and Cursor) for actually anonymizing data, as distinct from this repo, which only lets an agent read the research about why anonymization matters. If a query against this corpus surfaces a pain point your own data has, anonym.legal is the tool built to act on it.

Issues

Found a data problem, a broken query, or a gap in what's exposed? Open an issue — corrections to the underlying corpus itself go through anonym.community/contact.html instead, since this repo only serves what that site publishes.

License

MIT © George Curta / curta.solutions

Available Tools

6 tools
get_corpus_statsA

Return counts, available filter values (tracks, regions), and data freshness for this corpus. Call this first to discover valid track and region values for the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses the tool's read-only nature (returning counts and values) and adds useful context like 'data freshness.' It could explicitly state 'read-only' or mention absence of side effects, but the implied safe discovery purpose is fairly transparent for a zero-parameter stats tool.

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, tightly focused, and front-loaded with the core action. The second sentence adds essential usage guidance without redundancy. Every word earns its place.

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

Completeness4/5

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

For a simple, parameterless tool with no output schema, the description is quite complete: it lists the main output categories (counts, filter values, data freshness) and explains its role relative to other tools. It could elaborate on data structure or format, but given the minimal complexity, this is sufficient.

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 coverage is trivially 100%. Per the baseline for 0 params, the description adds no parameter-specific detail but also doesn't need to. It correctly focuses on the tool's output, which serves the discovery purpose.

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 clearly states the tool returns counts, available filter values (tracks, regions), and data freshness for the corpus. This specific verb+resource phrasing ("Return counts...") distinguishes it from sibling search tools, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly instructs to call this tool 'first' to discover valid track and region values for other tools, providing clear when-to-use guidance. It implicitly excludes use for direct search/lookup since its role is discovery, which differentiates it from siblings.

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

list_structural_driversA

List or search the 98 structural drivers — the irreducible root causes that generate the pain points. Breaking one driver weakens many pain points at once, so these are the right unit for "why does this keep happening" and "what should we actually fix" questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1-50 (default 20).
queryNoOptional free-text filter over driver name and definition.
trackNoOptional research track filter.

TDQS

A4/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 adds useful context about the domain (98 drivers, root causes, breaking one weakens many pain points) but does not disclose operational behaviors such as read-only nature, return format, pagination, or any side effects. The 'list or search' wording implies a safe read operation, but it is not explicit.

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, front-loaded with the primary action and resource, followed by a concise usage rationale. Every word earns its place—no fluff, redundancy, or irrelevant detail. It is an ideal length for quick agent parsing.

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

Completeness4/5

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

Given the simple list/search tool with no output schema, the description provides strong conceptual context and usage guidance. It explains what the tool does, why it matters, and when to use it. However, it does not describe the return format or result structure, which would be helpful given the absence of an output schema. Still, the overall coverage is solid for the tool's moderate complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (limit, query, track) with clear descriptions. The tool description does not add additional meaning about parameter semantics; it focuses on the overall purpose. Baseline of 3 is appropriate because the schema handles parameter explanation.

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 opens with 'List or search the 98 structural drivers', which is a specific verb+resource statement. It further explains that drivers are the root causes generating pain points, clearly distinguishing this tool from siblings like search_pain_points or search_faq. The purpose is unambiguous and well-scoped.

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 states when this tool is appropriate: 'the right unit for 'why does this keep happening' and 'what should we actually fix' questions.' This gives clear context for usage. However, it does not explicitly name alternative tools or when not to use it, so it misses the 'exclusions/alternatives' element.

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

lookup_jurisdictionA

Look up privacy-law status for a country or region across 240 jurisdictions: whether it has a data protection authority, what legislation applies, and links. Use for "is there a privacy law in X" and cross-border transfer questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1-50 (default 10).
regionNoOptional region filter, e.g. "Europe", "Asia".
countryNoCountry name or fragment, e.g. "Brazil", "united".

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It clearly indicates a read-only lookup and specifies the returned content (DPA, legislation, links). However, it does not disclose behavioral nuances such as what happens when no jurisdiction matches, whether matching is case-sensitive, or any limitations on the region filter. This is adequate but not rich.

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

Conciseness5/5

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

Two sentences, with the first front-loading the core action and scope ('Look up privacy-law status...') and the second giving concrete use cases. No redundant or filler content; every sentence earns its place.

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

Completeness4/5

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

For a simple lookup tool with optional parameters and no output schema, the description covers the essential aspects: scope (240 jurisdictions), output content (authority, legislation, links), and typical use cases. It lacks details on response format or error handling, but overall it is sufficiently complete for an agent to select and invoke the tool.

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

Parameters3/5

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

Schema coverage is 100% with descriptive parameter explanations (e.g., 'country name or fragment'). The description adds the '240 jurisdictions' context and use cases but does not materially enhance parameter-level meaning beyond what the schema already provides. Baseline 3 applies.

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 the specific verb 'look up' and clearly identifies the resource: 'privacy-law status for a country or region across 240 jurisdictions'. It enumerates the output components (data protection authority, legislation, links), which distinguishes it from sibling tools focused on FAQs, pain points, research papers, etc.

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 explicit use cases: 'Use for "is there a privacy law in X" and cross-border transfer questions.' This gives clear context for when to choose this tool over siblings, though it does not mention specific alternatives or 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.

search_faqA

Search 134 evidence-backed privacy questions and answers, each with root cause, real-world example and supporting data points. Use for direct practitioner questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1-50 (default 5).
queryYesFree-text search over question and answer.

TDQS

A4/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 behavioral disclosure. It adds useful context about the content (134 items, evidence-backed, each with root cause/example/data points), but it does not state whether the operation is read-only, how results are ordered, or any limitations. This is adequate for a simple search tool but not rich.

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: the first states the primary action and content scope, the second gives usage guidance. There is no filler or redundancy, and the most important information is front-loaded.

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

Completeness4/5

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

For a tool with 2 parameters, full schema coverage, and no output schema, the description sufficiently explains the content scope (134 items, evidence-backed) and expected item composition (root cause, example, data points). It falls short of 5 only because it doesn't explicitly describe the return format or edge-case behavior like empty results, but this is minor for a search tool.

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 input schema fully describes both parameters ('query' and 'limit') with clear descriptions, achieving 100% coverage. The tool description does not add any parameter-specific semantics, so the baseline score of 3 applies.

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 opens with a specific verb ('Search') and identifies the exact resource ('134 evidence-backed privacy questions and answers'). It also outlines the content structure (root cause, real-world example, supporting data points), which distinguishes it from siblings like search_research_papers and search_pain_points.

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 final sentence, 'Use for direct practitioner questions,' gives a clear when-to-use context. However, it does not explicitly mention alternative tools or when not to use this tool, so it falls short of the explicit 'when/when-not/alternatives' level.

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

search_pain_pointsA

Search 1,478 documented PII/privacy pain points. Each is a concrete, evidenced problem (e.g. re-identification via quasi-identifiers, opt-out futility with data brokers), tagged with research track, category and severity. Use for "what goes wrong with X" questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1-50 (default 10).
queryYesFree-text search over title, description and evidence.
trackNoOptional research track filter, e.g. "AI Anonymization", "Data Brokers".

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that results are concrete, evidenced problems tagged with research track, category, and severity, providing useful context beyond a generic search tool. It stops short of describing return format or potential limitations, but it is informative.

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 exactly two sentences, front-loaded with the purpose, and includes examples and usage guidance without any filler. Every sentence contributes value.

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

Completeness4/5

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

For a 3-parameter search tool with no output schema, the description provides sufficient context: what is searched, how results are structured, and when to use it. Minor gaps like pagination or sorting are non-essential.

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 input schema covers all 3 parameters with descriptions (100% coverage), so the baseline is 3. The description adds general context about the corpus but does not add specific parameter-level semantics beyond what the schema already provides.

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 ('Search') and identifies a concrete resource ('1,478 documented PII/privacy pain points'), with examples that clearly distinguish it from sibling tools like search_faq or search_research_papers.

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 states when to use the tool: 'Use for "what goes wrong with X" questions.' This is clear context, but it does not mention alternatives or exclusions, so it falls short of a 5.

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

search_research_papersA

Search 1,600+ real academic papers underpinning the research (title, authors, abstract, DOI). Use when a claim needs a citable primary source.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1-50 (default 8).
queryYesFree-text search over title and abstract.

TDQS

A4.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. It adds context that the papers are 'real' and 'underpinning the research,' and lists searchable fields. However, it doesn't disclose behaviors like result ordering, handling of empty results, or read-only nature beyond what a search implies. Adequate but not rich.

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 fluff. The first sentence states the action and scope; the second gives usage direction. Information is front-loaded and easy to scan.

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

Completeness4/5

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

Given the tool's simplicity (2 params, 1 required) and full schema coverage, the description provides robust context. It lacks an explicit return structure since no output schema exists, but the mentioned fields make results inferable. Nearly complete for a search tool.

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

Parameters4/5

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

Schema covers both parameters (100%). The description adds value by specifying searchable fields 'title, authors, abstract, DOI,' which extends beyond the schema's claim of 'title and abstract.' This clarifies query scope and enriches parameter understanding.

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 clearly states the tool 'Search 1,600+ real academic papers' with specific fields (title, authors, abstract, DOI), making the action and resource explicit. This distinguishes it from sibling tools like search_faq and search_pain_points, which target different content types.

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?

Provides explicit usage context: 'Use when a claim needs a citable primary source.' This clearly indicates when to select this tool. It does not explicitly mention alternatives or when not to use it, but the context is strong enough to guide selection.

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

Tool Schema Changelog

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

  1. 6 tool updatesv2.0.0
    • First observedget_corpus_stats
    • First observedlist_structural_drivers
    • First observedlookup_jurisdiction
    • First observedsearch_faq
    • First observedsearch_pain_points
    • First observedsearch_research_papers

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct content type: FAQ entries, pain points, structural drivers, jurisdiction statuses, research papers, and corpus metadata. The search tools are differentiated by their object type, and the descriptions explicitly state when to use each, so there is no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., search_faq, search_pain_points, list_structural_drivers, lookup_jurisdiction, search_research_papers, get_corpus_stats). Verbs are action-appropriate and nouns clearly indicate the resource.

Tool Count5/5

With 6 tools, the server is well-scoped for its purpose of accessing a privacy research corpus. Each tool covers a distinct content type or metadata function, and none are redundant.

Completeness5/5

The server covers discovery and search across all major corpus components (FAQ, pain points, structural drivers, jurisdictions, research papers) plus a stats/metadata tool for valid filters. There are no obvious dead ends, as every tool returns the information needed for its use case.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Zero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.
    10
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI tools to query a user's private, locally stored memories (notes, documents) with source citations, using the MCP protocol.
    10 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for grounded agentic Q&A over customer feedback, exposing typed tools to query a feedback corpus and return answers with citations to specific record IDs or a refusal when unsupported.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A Personal Knowledge-Base MCP Server that provides semantic search over a student-owned document collection using MCP, Gemini embeddings, and Qdrant. It exposes tools for searching notes, retrieving full documents, and listing indexed sources.
    -