antientropy-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@antientropy-mcpfind articles about nonprofit whistleblower policies"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
antientropy-mcp
MCP server for searching and reading articles from the AntiEntropy Resource Portal. Gives Claude Code (or any MCP client) access to 140+ articles on nonprofit governance, compliance, HR policies, and fiscal sponsorship.
Tools
antientropy_glob — find articles by title/category path (
*policy*,Governance*/**)antientropy_grep — regex search across article content, ripgrep-style output
antientropy_read — read an article by slug with line numbers
antientropy_categories — browse the full category tree
Related MCP server: mcp-moncompte
Usage
Remote (hosted on Fly.io)
claude mcp add --transport http antientropy https://antientropy-mcp.fly.dev/mcpLocal (stdio)
claude mcp add antientropy -- uv run --directory /path/to/antientropy-mcp python -m antientropy_mcpPopulate the cache on first use:
uv run antientropy-syncArticles are cached locally (~~/.antientropy-mcp). The remote server syncs daily via cron.
Development
uv sync
uv run pytestDeploy
flyctl deployRequires a Fly.io volume named data mounted at /data. See fly.toml for config.
Available Tools
4 toolsantientropy_categoriesB
List the category tree of the AntiEntropy Resource Portal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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. It states the tool lists a category tree, implying a read-only operation, but does not cover aspects like rate limits, authentication needs, error handling, or the structure of the output. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description is minimally adequate. However, it lacks behavioral context (e.g., how the category tree is structured or any usage constraints), which is important for a tool with no annotations. This results in a baseline score of 3, indicating clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so there is no need for parameter details in the description. The baseline for this scenario is 4, as the description appropriately avoids redundant information and focuses on the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('category tree of the AntiEntropy Resource Portal'), making the purpose understandable. However, it does not explicitly differentiate this tool from its siblings (antientropy_glob, antientropy_grep, antientropy_read), which would be needed for a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 its siblings or any alternatives. It lacks context about specific scenarios or exclusions, leaving the agent without usage direction beyond the basic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
antientropy_globA
Find articles matching a glob pattern.
Pattern matches against the virtual path: {category_path}/{slug} Examples: '/gdpr', 'policy', 'Governance/*', '**' (all) Returns matching articles with titles and category paths.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | ** |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 clearly describes what the tool does (returns matching articles with titles and category paths) and provides examples of pattern usage, but doesn't mention performance characteristics, rate limits, authentication requirements, or what happens with invalid patterns. The description doesn't contradict any annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured and front-loaded with the core purpose in the first sentence, followed by essential details about pattern matching, concrete examples, and return values. Every sentence earns its place with no wasted words, making it highly efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (pattern matching with glob syntax), no annotations, and the presence of an output schema (which handles return value documentation), the description is quite complete. It covers purpose, usage, parameter semantics, and examples well. The main gap is lack of behavioral details like error handling or performance limits, but the output schema reduces the need for return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and only one parameter, the description adds significant value beyond the schema. It explains what the pattern matches against ('virtual path: {category_path}/{slug}'), provides concrete examples of valid patterns, and clarifies the default pattern '**' means 'all'. This fully compensates for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Find articles') and resource ('matching a glob pattern'), and distinguishes it from siblings by focusing on pattern-based matching rather than category listing (antientropy_categories), content searching (antientropy_grep), or direct article reading (antientropy_read).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (finding articles by glob pattern against virtual paths) and includes helpful examples, but doesn't explicitly state when not to use it or name specific alternatives among the sibling tools, though the pattern focus implicitly suggests it's for path-based matching rather than content searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
antientropy_grepA
Search article content with a regex pattern.
Returns matches formatted like ripgrep: slug:line_number:matching_line
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| case_insensitive | No | ||
| context_lines | No | ||
| head_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 adds some context by describing the return format ('Returns matches formatted like ripgrep: slug:line_number:matching_line'), which is useful. However, it doesn't cover other behavioral aspects like error handling, performance implications, or any constraints beyond the output format, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence and adds necessary output format details in the second. Every sentence earns its place without redundancy, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 0% schema coverage, no annotations) and the presence of an output schema, the description is reasonably complete. It explains the purpose and output format, but could improve by addressing parameter semantics and usage guidelines to better compensate for the lack of annotations and low schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 provides no information about parameters beyond implying a regex pattern. The description mentions 'regex pattern' which aligns with the 'pattern' parameter, but doesn't explain the semantics of 'case_insensitive', 'context_lines', or 'head_limit'. This partial compensation results in a baseline score due to the lack of detailed parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Search article content') and the method ('with a regex pattern'), distinguishing it from siblings like antientropy_categories, antientropy_glob, and antientropy_read. It provides a verb+resource combination that is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus its siblings, such as antientropy_glob or antientropy_read. It lacks explicit context, exclusions, or alternatives, leaving the agent to infer usage based on tool names alone without any direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
antientropy_readA
Read an article's content by slug.
Returns content with line numbers (cat -n format). Use antientropy_glob or antientropy_grep to discover slugs.
| Name | Required | Description | Default |
|---|---|---|---|
| article_slug | Yes | ||
| offset | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it returns content with line numbers (cat -n format), which adds useful context beyond basic reading. However, it doesn't cover other aspects like error handling, permissions, or rate limits, leaving gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with three concise sentences that each serve a clear purpose: stating the action, specifying the return format, and providing usage guidance. There is zero waste, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with parameters), no annotations, and an output schema present, the description is reasonably complete. It explains the return format and usage context, but since the output schema exists, it doesn't need to detail return values. However, with 0% schema coverage and no annotations, it could benefit from more parameter guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions 'article_slug' and implies usage with offset and limit through 'Returns content with line numbers,' but doesn't explicitly explain the parameters' roles or semantics. This adds minimal value beyond the schema, resulting in a baseline score due to incomplete compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Read') and resource ('article's content by slug'), making the purpose specific and understandable. It distinguishes from siblings by mentioning antientropy_glob and antientropy_grep as discovery tools, but doesn't explicitly differentiate from antientropy_categories, which might be a related but distinct operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'Use antientropy_glob or antientropy_grep to discover slugs,' which guides when to use this tool (after slug discovery) and mentions alternatives for that purpose. However, it lacks explicit exclusions or comparisons to all siblings like antientropy_categories, leaving some ambiguity.
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.
4 tool updates
v0.1.0- First observed
antientropy_categories - First observed
antientropy_glob - First observed
antientropy_grep - First observed
antientropy_read
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: antientropy_categories lists the category tree, antientropy_glob finds articles by path pattern, antientropy_grep searches article content with regex, and antientropy_read retrieves article content by slug. There is no overlap or ambiguity between these functions.
All tool names follow a consistent 'antientropy_' prefix with descriptive suffixes (categories, glob, grep, read) in snake_case. This pattern is uniform throughout the set, making the tools easily identifiable and predictable.
With 4 tools, the count is reasonable for a resource portal server, covering browsing (categories, glob), searching (grep), and reading (read). It is slightly lean but well-scoped, as each tool serves a distinct and necessary function without redundancy.
The tool set provides a complete workflow for discovering and accessing articles: listing categories, finding articles by path or content, and reading content. Minor gaps might include operations like creating or updating articles, but for a read-only portal, the coverage is sufficient for typical agent tasks.
Maintenance
Related MCP Connectors
Knowledge base MCP for AI agents on iknow.dev. Search, read, and maintain via OAuth.
MCP server for nonprofit financials via ProPublica — IRS Form 990 data for 1.8M+ nonprofits.
Read and edit your Acorn Reply knowledge base from any MCP client.
Read-only search and Markdown access to liz's public docs, prompts, resources, and an MCP App.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server that provides access to ProPublica's Nonprofit Explorer API, enabling AI models to search and analyze nonprofit organizations' Form 990 data for CRM integration and prospect research.1MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server exposing the catalog of articles from moncompte.org. Enables AI agents to search and retrieve article content via tools.MIT
- AlicenseAqualityDmaintenanceDelivers on-demand knowledge from a built-in library of 728 agents, skills, patterns, and examples across 26 domains to any MCP-compatible AI tool.612 npm1MIT
- AlicenseNot gradedqualityAmaintenanceSearch and explore 1.8M+ US nonprofits, fetch Form 990 financials, and access IRS filing history via MCP.72 npm2Apache 2.0