mcp-metsuke-crunchtools
OfficialThis server is a stateful MCP reports catalog that lets agents define what to gather, trigger and persist cited findings, and read them back for compilation.
Manage report definitions – create or update reports with name, gather prompt, owner agent, cron schedule, timezone, and source config (
upsert_definition).List report catalog – view all definitions with prompts, owners, schedules, source configs, and update times (
list_reports).Inspect a report spec – fetch the full gather prompt and source configuration for a named report (
get_spec).Trigger gathering on demand – fire a report immediately without waiting for the cron schedule (
trigger_report).Save gathered outputs – persist findings as an array of objects, each ideally carrying a source URL, with status, window times, and gatherer run reference (
save_output).Read outputs for compilation – retrieve the freshest output or the latest output for a specific date (
get_output).Built-in scheduler – automatically fires report gathers according to cron schedules when running under SSE or streamable-http transports.
Multiple transports – supports stdio, SSE, and streamable-http for flexible agent integration.
Local-first storage – stores everything in a plain SQLite database (WAL mode) with no external services required.
Click on "Install 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., "@mcp-metsuke-crunchtoolspull the freshest output for the 'weekly vuln scan' report"
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.
mcp-metsuke-crunchtools
Stateful reports catalog MCP server. Metsuke (目付 — the Sengoku intelligence officer who gathered field reports and compiled them for the daimyō) is the durable, cross-agent home for report definitions and their gathered outputs.
An autonomous gatherer reads a definition, sweeps the configured sources, and writes findings — each carrying its own source URL. A compiler later reads the freshest output to draft a fully cited report. This replaces ad-hoc, run-scoped research caches with a real, queryable store.
Features
Definitions + outputs — separate what-to-gather from what-was-gathered
Built-in scheduler — Metsuke fires each definition's gather when its cron schedule comes due, or on demand via
trigger_report— no external timerRun lifecycle — every fire opens a durable run with a second-granularity
run_id: a provisional row is recorded before the callback (a fire is never lost), and a per-report concurrency lock keeps two gathers from racingCited findings — payloads carry per-finding source URLs for one-click checking
Re-homeable gathering —
owner_agentmakes the gatherer identity data, not codeLocal-first — plain SQLite (WAL), no external services, no per-seat fees
Three transports — stdio, SSE, streamable-http
Related MCP server: arcane
Install
uvx (recommended)
uvx mcp-metsuke-crunchtoolspip
pip install mcp-metsuke-crunchtoolsContainer
podman run --rm -v ~/.local/share/mcp-metsuke:/data:Z \
quay.io/crunchtools/mcp-metsuke \
--transport streamable-http --host 0.0.0.0 --port 8009Claude Code Integration
claude mcp add mcp-metsuke-crunchtools -- uvx mcp-metsuke-crunchtoolsTools (9)
Definitions (4)
Tool | Description |
| List all report definitions in the catalog, each with its next scheduled fire time. |
| Return the gather prompt + source config for one definition. |
| Create or update a definition (name, prompt, owner, cron schedule, timezone, sources). |
| Fire a report gather right now, without waiting for its schedule. |
Outputs (5)
Tool | Description |
| Complete a run by persisting its gathered findings (pass the |
| Read the freshest output (or a specific day's) for compiling a report. |
| Browse the run history — metadata + |
| Delete one saved output by id. |
| Bulk-prune a report's outputs — keep the N newest, or drop those before a date. |
Environment Variables
Variable | Default | Description |
|
| SQLite database path |
| (none) | Path whose contents override |
| (none) | Base URL of the Trentina alert endpoint the scheduler POSTs gather callbacks to |
| (none) | Alert token identifying the reports profile; enables the scheduler when set with |
| (none) | Path whose contents override |
|
| How often the scheduler checks for due reports |
| (auto) | Force the scheduler on/off; defaults to on when the callback is configured |
|
| How long an in-flight run holds the per-report lock before it is expired (self-heals a dead gatherer) |
The scheduler runs only under the sse and streamable-http transports (the long-lived production processes), never under stdio.
Data Model
report_definitions —
name(PK),gather_prompt,owner_agent,schedule(cron),timezone(IANA),source_config(JSON),last_fired_at,updated_atreport_outputs (one row per run) —
id,report_name(FK),run_id(second-granularity identity),trigger(scheduled/manual/direct),gathered_at,finished_at,window_start/window_end,payload(JSON findings with source URLs),status(gathering/ready/compiled/failed),gatherer_run_ref,detail. A partial unique index on(report_name) WHERE status='gathering'is the per-report concurrency lock.
MCP Registry
io.github.crunchtools/metsuke
License
AGPL-3.0-or-later
Available Tools
5 toolsget_output_toolA
Read a gathered report output for compiling a report.
Returns the most recent output by default, or the latest output gathered on a specific date when gathered_date is given.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The report definition name | |
| gathered_date | No | Optional YYYY-MM-DD to fetch that day's output instead |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the default behavior (most recent output), the date-specific behavior, and the fallback semantics of 'latest output gathered on a specific date.' This is meaningful behavioral context beyond what the schema expresses, though it does not cover edge cases like missing outputs.
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 compact and front-loaded: the main purpose appears in the first sentence, and the only additional sentence explains the optional parameter behavior. Every sentence earns its place with no redundancy or 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?
For a low-complexity read tool, the description is complete: it states the resource, the default behavior, the optional date behavior, and the parameters are fully covered by the schema. An output schema exists, so return-value details are already provided elsewhere, and no critical invocation detail is 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?
Both parameters are already well described in the schema, so the baseline is 3. The description adds context by explaining the default selection behavior and how gathered_date changes the result, but it does not significantly expand on the parameter meanings beyond what the schema already provides.
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 a specific verb ('Read') and resource ('gathered report output'), and it adds the purpose ('for compiling a report'). It also distinguishes this tool from siblings by clarifying it retrieves outputs, whereas list_reports_tool, get_spec_tool, and save_output_tool imply different purposes.
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 usage context is implied by the phrase 'for compiling a report' and by the optional date parameter, but there is no explicit guidance on when to choose this tool over alternatives. It does not describe exclusions or mention sibling tools, so the agent must infer the appropriate moment to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spec_toolA
Return the gather spec (prompt + source config) for a report definition.
This is what the autonomous gatherer calls on callback to learn what to collect for the named report.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The report definition name (e.g. "core-platform-status") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clarifies what the return payload contains (prompt + source config) and the invocation context, but it does not explicitly state that the operation is read-only, what happens for unknown report names, or any auth requirements. 'Return' implies a safe read, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the core action and resource; the second adds valuable contextual information about the caller. Every word earns its place.
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 one-parameter read tool with an existing output schema, the description provides enough to invoke it correctly: what it returns and when to use it. Minor gaps such as not-found behavior or explicit read-only assurance are acceptable for a simple getter, but would make it more 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?
The input schema already provides 100% coverage for the single 'name' parameter, including an example. The description adds only a slight restatement ('named report') and does not provide additional semantic depth such as naming conventions, validation rules, or behavior for missing names.
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 'Return' with a clear resource: 'gather spec (prompt + source config) for a report definition.' The second sentence adds a concrete invocation context (autonomous gatherer callback), which makes its distinct role relative to sibling tools obvious.
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 clearly states when this tool is used: the autonomous gatherer calls it on callback to learn what to collect for the named report. It does not explicitly mention alternatives or exclusions, but the callback context is strong enough to guide an agent without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reports_toolA
List all report definitions in the catalog.
Returns each definition with its gather prompt, owner agent, schedule, source config, and last-updated time.
| 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?
There are no annotations, so the description carries the behavioral burden. It clearly states this is a listing operation that 'returns each definition' with specific fields, implying a non-mutating read behavior. It does not mention edge cases or pagination, but for a simple list tool this is adequate.
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 two short sentences with no filler. The core purpose is front-loaded in the first sentence, and the second sentence efficiently enumerates the return fields.
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 zero parameters, an output schema present, and a clear statement of purpose and returned fields, the description fully supports correct invocation and selection. Nothing essential is 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 tool has zero parameters, so the baseline is 4. The description reinforces that it lists 'all' definitions and returns each one, making it clear there are no filters or arguments required.
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 action ('List all report definitions') and a specific resource ('the catalog'), making the tool's function clear. It does not explicitly mention sibling tools, but the 'all' scope and report-definition focus distinguish it from the get/save/upsert siblings.
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 intended use is implied: use it when you need to enumerate all report definitions in the catalog. However, it does not explicitly state when not to use it or how it relates to alternatives like get_spec_tool or get_output_tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_output_toolA
Persist a gathered report output.
The gatherer writes findings here after sweeping the sources. Each finding in payload should carry its own source URL so the compiler can cite it.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | One of "gathering", "ready", "compiled" (default: "ready") | ready |
| payload | Yes | List of finding objects, each ideally carrying a source URL | |
| window_end | No | End of the reporting window (ISO date/datetime) | |
| report_name | Yes | The report definition this output belongs to | |
| window_start | No | Start of the reporting window (ISO date/datetime) | |
| gatherer_run_ref | No | Opaque reference to the gatherer run that produced this |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It adds useful context about payload expectations (source URL required for citation) but doesn't disclose side effects such as whether existing output is overwritten, how status transitions are used, or any write permissions needed.
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 three sentences are dense and relevant: a one-line purpose, a workflow placement, and a payload data contract. No filler or repetition of schema details.
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 description orients the agent in the pipeline (gatherer → this tool → compiler) and states the one non-obvious payload requirement. Parameters are fully documented in the schema, and an output schema exists, so missing return-value details are not a gap. It falls short of complete only because it doesn't specify the effect of repeated saves.
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 100%, so the baseline is 3. The description reinforces the payload's source-URL requirement with 'should carry its own source URL,' slightly strengthening the schema's weaker 'ideally carrying,' but it doesn't add meaning for other parameters beyond what the schema already provides.
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 opens with a specific verb and resource: 'Persist a gathered report output.' It further defines the tool's role as the place where the gatherer writes findings, which clearly differentiates it from sibling read tools like get_output_tool and definition 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?
States a clear usage context: the gatherer should write findings here after sweeping sources. It doesn't explicitly name alternatives or negative cases, but the workflow cue is enough for an agent to decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_definition_toolA
Create or update a report definition.
The owner_agent field makes the gatherer identity data, not code, so gathering can be re-homed to another agent without a rebuild.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique report name (e.g. "core-platform-status") | |
| schedule | No | Descriptive cron/time metadata (the actual firing is external) | |
| owner_agent | No | Which agent gathers this report (default: "kagetora") | kagetora |
| gather_prompt | Yes | The instruction the gatherer runs to collect findings | |
| source_config | No | Which sources to sweep, as a JSON object |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this is a mutation operation and adds a meaningful design trait: owner_agent is identity data, not code, allowing re-homing without rebuild. However, with no annotations provided, it does not describe overwrite/replacement semantics, permissions, or other side effects of updating an existing definition.
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 concise: two sentences, front-loaded with the core operation, followed by a single valuable design nuance. There is no filler or repetition of schema details.
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 presence of a full output schema and complete parameter descriptions reduces the burden on the description. Still, because annotations are absent, the description should clarify update behavior more explicitly, such as whether an update replaces or merges the existing definition. It is adequate but not fully 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?
The input schema already documents all five parameters with 100% coverage, so the baseline is 3. The description adds extra value by explaining that owner_agent is data rather than code, which is not stated in the schema itself.
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: 'Create or update a report definition.' This unambiguously distinguishes the tool from siblings like list_reports_tool, get_spec_tool, save_output_tool, and get_output_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 intended use is implied by the resource and operation, but the description gives no explicit guidance about when to use this tool versus alternatives. It does not mention sibling tools or provide when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.2.0- First observed
get_output_tool - First observed
get_spec_tool - First observed
list_reports_tool - First observed
save_output_tool - First observed
upsert_definition_tool
TDQS
Each tool targets a distinct resource or action: report definitions versus gathered outputs, and read versus write operations. There is no meaningful overlap between listing definitions, fetching specs, upserting definitions, saving outputs, or reading outputs.
All tool names follow a consistent verb_noun_tool pattern: list_reports, get_spec, upsert_definition, save_output, get_output. The naming convention is uniform and predictable.
Five tools is well-scoped for this server's apparent purpose: managing report definitions and gathering/reading report outputs. Each tool serves a clear role without unnecessary redundancy.
The server covers the core workflow: create/update definitions, inspect them, gather output, and retrieve output. A delete operation for definitions or outputs is absent but not clearly required by the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A public commons for agents to search and share reusable findings and open research questions.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Search and share cited agent findings. Public reads; authenticated writes.
1Verified registry of third-party-system knowledge — the external-dependency layer for agent memory.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to autonomously manage and improve execution processes for repetitive task types by storing reusable task contexts with associated artifacts (practices, rules, prompts, learnings) and providing full-text search across historical best practices.81MIT
- AlicenseNot gradedqualityBmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT
- FlicenseNot gradedqualityCmaintenanceProvides AI agents with persistent memory across sessions, enabling recall of decisions, clients, and deadlines with verifiable citations.-
- AlicenseNot gradedqualityCmaintenanceDurable, inspectable memory for MCP agents. Preserves decisions, preferences, and project knowledge across sessions with full provenance and version history.2Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/crunchtools/mcp-metsuke'
If you have feedback or need assistance with the MCP directory API, please join our Discord server