Local News Matters MCP server
Provides read-only access to articles, photos, categories, tags, and authors from a WordPress site via its REST API.
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., "@Local News Matters MCP serversearch for articles about wildfires"
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.
Local News Matters MCP server
An MCP server that exposes the articles and photos of Local News Matters — the Bay City News Foundation's nonprofit local-news site — to MCP-aware clients such as Claude Desktop and Claude Code.
It is a thin, read-only wrapper over the site's public WordPress REST API
(/wp-json/wp/v2/), normalizing the verbose WordPress JSON into compact,
LLM-friendly objects.
What it provides
Tools (search / read the live catalog)
Tool | Description |
| Full-text article search with paging + filters (category, tag, author, date range). |
| The latest published articles. |
| A single article by numeric ID, including full body text. |
| A single article by its URL slug. |
| Search the photo/media library (images only). |
| A single photo's metadata + every available size. |
| All photos attached to a given article. |
| Site sections, ordered by article count. |
| A single category by ID (name, slug, description, count). |
| Topic tags (optionally filtered). |
| A single tag by ID (name, slug, description, count). |
| Contributors / authors. |
| Static pages (About, Contact, Donate, …), sorted by title. |
Every read tool above accepts an optional response_format argument — "json"
(the default, raw structured data) or "markdown" (compact, human-readable
text).
Resources (addressable by URI)
URI | Description |
| One article (full text) as JSON. |
| Photos attached to an article. |
| One photo's metadata and sizes. |
| The latest articles. |
| The site's categories. |
Because the archive holds thousands of items, the full catalog is reached through the search/list tools; resource templates address any individual item once you know its ID.
Related MCP server: mcp-arcgis
Install & run
Requires Python 3.10+.
# clone the repo
git clone https://github.com/rnakashima1/localnewsmatters-mcp.git
cd localnewsmatters-mcp
# run it (uv installs dependencies on first run)
uv run localnewsmatters-mcp
# or, once installed into an environment
pip install .
localnewsmatters-mcpThe server speaks MCP over stdio, which is what desktop clients expect.
Configure a client
Claude Code
claude mcp add localnewsmatters -- uv run --directory /absolute/path/to/clone/localnewsmatters-mcp localnewsmatters-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"localnewsmatters": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/clone/localnewsmatters-mcp", "localnewsmatters-mcp"]
}
}
}Configuration (environment variables)
Variable | Default | Purpose |
|
| Site root; point at a staging mirror if needed. |
|
| Outbound |
|
| Per-request timeout in seconds. |
Development
uv sync # install runtime + dev dependencies
uv run pytest # run the test suite (fully offline; HTTP is mocked)Notes & limitations
This is an unofficial client and is not affiliated with or endorsed by Local News Matters / Bay City News Foundation. Please respect the site's terms of use and use the data responsibly, with attribution.
The server depends on the WordPress REST API being publicly enabled at
/wp-json/wp/v2/. If the site changes platforms or restricts the API, the endpoints inwp_client.pywill need to be updated.All access is read-only.
License
MIT
Available Tools
13 toolsget_articleA
Fetch a single article by numeric ID, including full body text.
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | ||
| response_format | No | json |
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, yet it only says it returns full body text. It does not mention error behavior for invalid IDs, whether the article must be published, or auth requirements. The return-shape disclosure is thin even though an output schema exists.
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?
A single well-formed sentence with the key qualifier ('by numeric ID') and return scope ('full body text') front-loaded. No filler.
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?
Output schema exists so return structure needn't be explained, but with zero annotation coverage and 0% schema description coverage, the description should have covered the undocumented response_format parameter and basic error/auth behavior. It is minimally adequate rather than complete.
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 coverage is 0%, so the description must compensate, and it does for article_id by specifying 'numeric ID' and the single-article constraint. However, it never mentions response_format, leaving one of two parameters undocumented in prose.
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?
States a specific verb and resource ('Fetch a single article'), distinguishes 'single' from list/search siblings like search_articles and list_recent_articles, and names the scoping key ('by numeric ID') which further separates it from get_article_by_slug.
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?
Implicitly signals this is the direct-ID lookup path versus the slug alternative, but it never names get_article_by_slug or states when to pick one over the other. No when-not-to-use guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_article_by_slugB
Fetch a single article by its URL slug (the last path segment of its URL).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| response_format | No | json |
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 disclosure burden. 'Fetch' implies a read, but there is no statement about read-only safety, missing-slug behavior, or whether the call is scoped/rate-limited, and the response shape is left entirely to the output schema.
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?
A single tight sentence that front-loads the action and immediately clarifies the one ambiguous term. Nothing is wasted.
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?
An output schema exists so return values need not be described. But for a two-parameter lookup tool with no annotations, the description omits the response_format option and any differentiation from sibling get_article, leaving meaningful gaps.
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 does a good job explaining `slug` (the last path segment of the URL), but never mentions `response_format`, whose meaning is only available indirectly through the $defs enum title. Half the parameters are effectively undocumented in the description.
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?
States a specific verb (Fetch) and resource (a single article) plus the keying mechanism (URL slug), which is more than a restatement of the name. It does not, however, distinguish itself from the sibling get_article, so an agent cannot tell from the description alone which one to prefer.
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?
There is no when-to-use guidance, no statement of when this is preferable to get_article or search_articles, and no note about what happens when the slug does not exist. The reader must infer the selection criteria entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_article_photosB
List every photo attached to a given article.
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It says 'List' but doesn't disclose whether results are paginated, sorted, limited in count, or what happens if the article_id is invalid. Lacking such operational details, it's significantly under-specified for an unannotated tool.
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?
A single, front-loaded sentence with no extraneous words. Every part earns its place, making the purpose immediately clear.
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?
An output schema exists, so return format needn't be explained. However, with no annotations and 0% schema description coverage, the description should do more to cover behavior and parameter semantics. It provides just enough to be minimally viable but leaves clear gaps.
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 would ideally clarify both parameters. It hints at the article_id (the 'given article') but says nothing about response_format (enum json/markdown) or its default. It partially compensates but misses half the parameters, making it only marginally helpful.
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?
Clear verb (List) and resource (photos attached to a given article). It distinguishes itself from photo-level tools like get_photo or search_photos by scoping to a single article. However, it doesn't explicitly contrast with siblings like search_photos or get_article, so it falls short of the highest differentiation.
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 implies usage when you have an article_id and want its photos, but offers no explicit when-to-use versus alternatives like search_photos or get_photo. It's minimally adequate but leaves the agent to infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoryA
Fetch a single category by ID, including its description and article count.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes | ||
| response_format | No | json |
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 behavioral burden. It usefully discloses what comes back (description text and article count) and 'Fetch' implies a read-only lookup, but it says nothing about behavior for a nonexistent/invalid ID or any access requirements.
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?
A single sentence with zero filler, front-loaded with the verb and the lookup key, and it also compresses the return payload into the same line. Nothing is wasted.
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?
For a simple getter with an output schema present, return-value detail is not strictly required, so the description is nearly sufficient. However, with no annotations and 0% schema coverage, it leaves the response_format parameter and not-found behavior unexplained.
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 clarifies that the ID identifies a single category, but the second parameter (response_format) is never mentioned in the description; only the $defs enum definition hints at its meaning.
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?
States a specific verb (Fetch) and resource (a single category by ID), and the 'single ... by ID' scope clearly separates it from the sibling list_categories. It does not name any sibling explicitly, so it lands just short of the top tier.
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?
Usage is implied: use this when you already have a category ID and need one category rather than a list. There is no explicit when-to-use/when-not guidance, no mention of list_categories as the alternative, and no error/precondition context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_photoB
Fetch a single photo by numeric ID, including caption, alt text and available sizes.
| Name | Required | Description | Default |
|---|---|---|---|
| photo_id | Yes | ||
| response_format | No | json |
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, and it does add that the result includes caption, alt text and available sizes. It says nothing about what happens when the ID does not exist, permission/auth needs, or rate limits. Since an output schema exists, the payload description is partly redundant rather than genuinely additive.
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?
A single front-loaded sentence that identifies the resource, the lookup key, and the payload with zero filler. Nothing to trim.
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?
For a simple two-parameter read tool with an output schema, the essentials are mostly covered, but with no annotations and 0% schema description coverage the description should have addressed response_format and error behavior for a missing ID. It is adequate but visibly thin on the gaps structured fields leave open.
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 only restates 'numeric ID' (already implied by type integer, minimum 1) and never mentions response_format or the json/markdown serialization choice. The enum-bearing parameter is entirely undocumented in prose.
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?
States a specific verb and resource ('Fetch a single photo') and scopes it to the numeric ID, which distinguishes it from search_photos and get_article_photos. It does not name a sibling explicitly, and it also advertises a return payload ('caption, alt text and available sizes') that belongs to the fetching, not the identifying, but a reader can still route to it correctly.
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?
Usage is only implied: 'single photo by numeric ID' signals a direct lookup versus the siblings search_photos and get_article_photos, and the 'numeric ID' key contrasts with get_article_by_slug. There is no explicit when-to-use, when-not, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagA
Fetch a single tag by ID, including its description and article count.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | ||
| response_format | No | json |
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 must carry behavioral context. 'Fetch' strongly implies a read-only operation, and the description discloses that the response includes the tag's description and article count. However, it does not mention error behavior, permissions, or serialization details.
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, front-loaded sentence with no wasted words. It communicates the essential action and return contents immediately.
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?
Because an output schema exists, the description does not need to explain return structure in detail. For a simple read-by-ID tool, the description is largely complete, though it could mention the response_format option.
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 should compensate for undocumented parameters. It clarifies that the lookup is by ID, but it completely omits the response_format parameter, which controls whether the result is JSON or Markdown.
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 states a specific verb and resource: 'Fetch a single tag by ID.' It also names the included fields (description and article count), which distinguishes it from the sibling list_tags tool.
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 phrase 'single tag by ID' implies when to use this tool rather than a listing tool, but it does not explicitly name alternatives or state when not to use it. Usage is inferable but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_authorsC
List the site's authors/contributors.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | json |
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 must carry the full behavioral burden. It states only what is listed, without mentioning whether results are paginated, sorted, may be empty, or require any auth. For a read-only listing tool this is minimally acceptable but lacks any behavioral detail.
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?
One short, front-loaded sentence with zero waste. It gets to the point immediately and fits the tool's simplicity.
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?
An output schema exists, so return values needn't be explained, but the description should at least mention the response_format parameter or when to use the tool. With no annotations, no parameter info, no usage guidance, and a single bare sentence, the definition is incomplete for even a simple list tool.
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 schema has one parameter with 0% description coverage, and the tool description doesn't mention it at all. The omitted parameter controls how the result is serialized (json/markdown), which could materially affect usability, yet the description gives no hint.
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 states a specific verb (List) and resource (site's authors/contributors), which is clear. It does not differentiate itself from siblings like list_pages or list_categories, but the resource is distinct, so an agent can identify it without opening the schema.
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?
There is no when-to-use or when-not-to-use guidance. It doesn't mention alternatives or conditions under which this tool should be selected over others. The context is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesC
List the site's categories (sections), ordered by article count.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | json |
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 behavioral burden. It discloses the ordering behavior ('ordered by article count'), but says nothing about read-only safety, authentication requirements, pagination, or response size for what is presumably a list operation.
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 front-loaded sentence with no filler. Every word contributes to identifying the resource and its ordering, making it appropriately sized for a simple list tool.
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?
For a simple list tool with an output schema, the description is minimally adequate. However, with no annotations and no parameter detail, it leaves behavioral safety and output-format selection unaddressed, so an agent still lacks some context needed to invoke it confidently.
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 single response_format parameter is documented only through the schema's enum and default, with effectively no description coverage on the property itself. The tool description does not mention the parameter or explain how json vs markdown output should be chosen, so it fails to compensate for the low schema coverage.
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 uses a specific verb ('List') and resource ('the site's categories (sections)') and adds the ordering criterion 'by article count'. It is clear enough to distinguish from get_category, but it does not explicitly name any sibling or scope boundary, so it falls short of the top score.
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 gives no when-to-use guidance, no conditions for choosing this tool over alternatives like get_category or list_tags, and no exclusions. The purpose is merely stated, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesB
List the site's static pages (About, Contact, Donate, etc.), sorted by title.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | json |
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 behavioral burden. It discloses only the sort order; it says nothing about whether draft/hidden pages are included, pagination or result limits, or required permissions.
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?
A single front-loaded sentence with no filler; the resource and its scope are stated first and the ordering second. Nothing is wasted.
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?
An output schema exists, so return values need not be described. However, for a list tool with zero annotations and a completely undocumented parameter, key behavioral facts (pagination, visibility of unpublished pages, auth) are still missing.
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 single parameter (response_format) has 0% schema description coverage and is never mentioned in the description, so the agent gets no guidance on how serialization affects the result. The description adds nothing about parameters.
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?
States a specific verb+resource ('List the site's static pages'), disambiguates with concrete examples (About, Contact, Donate), and specifies the ordering. An agent can distinguish this from siblings covering articles, authors, categories, tags, and photos without opening another schema.
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 never says when to use this tool versus the many sibling list tools, nor does it state exclusions or prerequisites. Usage is only implied by the resource noun 'static pages'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_articlesC
List the most recently published Local News Matters articles.
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Doesn't mention pagination (per_page param), sorting order (most recent first implied but not stated), or response format options. Missing critical behavioral context for a list tool.
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?
Single sentence that is concise and front-loaded with the core purpose. No wasted words, but also no structure for additional necessary information.
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?
With output schema present, return values needn't be explained. However, for a list tool with 2 params at 0% schema coverage and no annotations, description should explain pagination, default behavior, and how to choose between this and search_articles. Incomplete.
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% and description adds no parameter explanations. per_page and response_format are undocumented in both schema and description, leaving agent unable to understand their purpose or constraints.
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?
States a specific verb (List) and resource (articles) but doesn't distinguish from siblings like search_articles or get_article. The 'Local News Matters' domain is clear, but no explicit differentiation from similar tools.
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?
No guidance on when to use this vs search_articles or get_article. Agent must infer from tool name alone that this is for browsing recent articles, not searching or fetching specific ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List topic tags, optionally filtered by a search term, ordered by usage.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses ordering ('by usage') and that the filter is optional, beyond what the bare schema conveys, but says nothing about result limits, pagination, matching semantics of the search term, or auth requirements.
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?
A single front-loaded sentence covering purpose, the optional filter, and ordering, with no redundant or filler text.
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?
For a simple read-only listing tool with an output schema already defining the return shape, the description covers purpose, filtering, and ordering adequately. The unmentioned response_format and lack of any auth/limit context are the only minor gaps.
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 schema contributes nothing. The description explains the intent of 'search' (filter by a term) but ignores 'response_format' entirely, leaving one of two parameters undocumented.
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?
States a specific verb and resource ('List topic tags') plus behavior (optional search filter, ordered by usage), which distinguishes it from get_tag. It does not explicitly differentiate itself from list_categories or list_authors, so it falls short of a 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?
Usage is only implied: the name and description make it obvious this is the enumeration tool for tags, in contrast to get_tag for a single tag. There is no explicit statement of when to prefer this over search_articles or the other list_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articlesA
Search Local News Matters articles.
Args: query: Full-text search terms. Leave empty to browse the most recent articles. page: 1-based page number for paging through results. per_page: Results per page (1-100). category_ids: Restrict to these category IDs (see list_categories). tag_ids: Restrict to these tag IDs (see list_tags). author_id: Restrict to a single author (see list_authors). after: ISO-8601 date; only articles published on/after it (e.g. "2024-01-01T00:00:00"). before: ISO-8601 date; only articles published on/before it. response_format: "json" (default) for raw data, or "markdown" for readable text.
Returns results (article summaries) plus total, total_pages, page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| after | No | ||
| query | No | ||
| before | No | ||
| tag_ids | No | ||
| per_page | No | ||
| author_id | No | ||
| category_ids | No | ||
| response_format | No | json |
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. It discloses the return structure and per_page bounds (1-100), but says nothing about pagination depth limits, rate limits, auth needs, or whether the search is read-only and side-effect-free—information an agent would want for a search 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 purpose is front-loaded in one line, followed by a compact per-argument list and a one-line return summary. Every line carries meaning with minimal waste; only minor trimming would be possible.
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?
For a 9-parameter tool with 0% schema coverage, the description covers every parameter, the default behaviors (query empty, json format), and the return payload. Even though an output schema exists, the summary of returned fields aids comprehension without redundancy.
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, and it does so fully: each of the 9 parameters is documented with meaning, format (ISO-8601 with an example for after/before), bounds (per_page 1-100), defaults, and cross-references to lookup tools for the ID-based filters.
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 opening sentence states a specific verb (Search) and resource (Local News Matters articles), which distinguishes it from get_article and get_article_by_slug. However, it does not differentiate itself from the sibling list_recent_articles, even though its own guidance ('leave empty to browse the most recent articles') overlaps that tool's apparent purpose.
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?
Usage is implied via parameter hints ('see list_categories', 'see list_tags', 'see list_authors') that route the agent to sibling lookup tools. But there is no explicit when-to-use versus list_recent_articles, and no statement of prerequisites or exclusions for the search-vs-browse decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_photosA
Search photos/images in the Local News Matters media library.
Args: query: Search terms matched against title, caption and alt text. page: 1-based page number. per_page: Results per page (1-100). article_id: Restrict to photos attached to a specific article. response_format: "json" (default) for raw data, or "markdown" for readable text.
Returns results (photo summaries incl. source_url) plus total, total_pages.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| query | No | ||
| per_page | No | ||
| article_id | No | ||
| response_format | No | json |
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 burden and discloses useful behavioral details including pagination fields and response_format options. It does not cover permissions, rate limits, or default search scope, but for a search tool it adds substantial context.
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 purpose, then structured into Args and Returns. Every sentence earns its place, and there is no redundant or misleading text.
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?
The tool has 5 parameters, no required parameters, and an output schema. The description fully documents parameter semantics and return fields, though it omits guidance on sibling-tool selection, leaving a minor gap.
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 fully. It does so by explaining every parameter: query matching against title/caption/alt text, 1-based page, per_page range, article_id restriction, and response_format behavior.
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 states a specific verb and resource: searching photos/images in the Local News Matters media library. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools like get_article_photos or get_photo.
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 implies usage through the article_id parameter and search semantics, but does not state when to prefer this tool over alternatives such as search_articles or get_article_photos. No explicit when-not guidance is provided.
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.
13 tool updates
v0.1.0- First observed
get_article - First observed
get_article_by_slug - First observed
get_article_photos - First observed
get_category - First observed
get_photo - First observed
get_tag - First observed
list_authors - First observed
list_categories - First observed
list_pages - First observed
list_recent_articles - First observed
list_tags - First observed
search_articles - First observed
search_photos
TDQS
Scored across 13 tools
Most tools have clearly distinct purposes, but there is some overlap: search_articles with an empty query duplicates list_recent_articles, and search_photos with article_id duplicates get_article_photos. The descriptions clarify these as convenience shortcuts, so an agent can still choose correctly, but the redundancy prevents a perfect score.
All tool names follow a consistent verb_noun pattern in snake_case: list_authors, get_article, search_photos, etc. The few longer names like get_article_by_slug and get_article_photos still fit the same convention without deviation.
With 13 tools covering articles, photos, authors, pages, categories, and tags, the set is well-scoped for a news site's read-only API. Each tool earns its place, and the count is comfortably within the ideal 3-15 range.
The surface covers the core read operations for all main resources: listing and fetching articles, photos, categories, tags, authors, and pages. Minor gaps include no get_author or get_page by ID, but these are unlikely to block typical agent workflows given the available list operations.
Maintenance
Related MCP Connectors
MCP gateway for manoforstaterep.com: articles, search and full text. Read-only, no auth.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
MCP gateway for donhuffines.com: articles, search and full text. Read-only, no auth.
Related MCP Servers
- AlicenseBqualityAmaintenanceRead-only MCP server for WooCommerce that enables answering questions about products, orders, sales, and blog posts via the WordPress REST API without needing plugins or write access.546 npm2MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for searching ArcGIS Online content and querying hosted feature layers, allowing natural language interaction with AGOL items and feature services.MIT
- AlicenseNot gradedqualityBmaintenanceAn attribution-first MCP server that provides tools to search and cite news and research metadata from free APIs and news platforms, without storing or republishing content.33 npm1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for WordPress content management via REST API, supporting posts, pages, media, comments, and terms through natural language interfaces like Cursor, ChatGPT, Codex, and Claude.11 npmMIT