loading…
Search for a command to run...
loading…
A dependency-free MCP server for Apache Incubator PMC oversight that helps identify podlings needing attention, assess graduation readiness, and generate podlin
A dependency-free MCP server for Apache Incubator PMC oversight that helps identify podlings needing attention, assess graduation readiness, and generate podling briefings by combining lifecycle data and community health signals.
A small MCP server for Apache Incubator PMC oversight views.
It composes:
apache-podlings-mcpapache-health-mcpapache-incubator-reports-mcpapache-incubator-mail-mcpapache-incubator-mail-mcpapache-incubator-releases-mcpIt exposes opinionated Incubator-level tools to help the IPMC:
python3 -m pip install .
For development tools:
python3 -m pip install -e .[dev]
After installation, run the stdio MCP server with:
ipmc-mcp \
--health-source /path/to/incubator/tools/health/reports \
--report-source /path/to/ReportMCP/.cache/incubator-reports \
--mail-source /path/to/MailMCP/.cache/incubator-general-mail
For local development without installing first, you can still run:
PYTHONPATH=/path/to/HealthMCP/src:/path/to/PodlingsMCP/src:/path/to/ReportMCP/src:/path/to/MailMCP/src:/path/to/ReleaseMCP/src \
python3 server.py \
--health-source /path/to/incubator/tools/health/reports \
--report-source /path/to/ReportMCP/.cache/incubator-reports \
--mail-source /path/to/MailMCP/.cache/incubator-general-mail
The server uses stdio, so it is intended to be launched by an MCP client.
{
"mcpServers": {
"ipmc": {
"command": "ipmc-mcp",
"args": [
"--health-source",
"/path/to/incubator/tools/health/reports",
"--report-source",
"/path/to/ReportMCP/.cache/incubator-reports",
"--mail-source",
"/path/to/MailMCP/.cache/incubator-general-mail"
]
}
}
}
The default runtime imports its source MCP libraries from installed packages:
apache-podlings-mcpapache-health-mcpapache-incubator-reports-mcpapache-incubator-mail-mcpapache-incubator-releases-mcpWhen installed with pip, these dependencies are pulled from their Git repositories. If you run server.py directly from a checkout instead, make the source packages importable with PYTHONPATH or install them first.
Configure startup defaults with command-line arguments or environment variables:
--podlings-source or IPMC_PODLINGS_SOURCE: optional URL or local path for podlings.xml--health-source or IPMC_HEALTH_SOURCE: local path for apache-health report Markdown files--report-source or IPMC_REPORT_SOURCE: local path for ReportMCP cached ASF Incubator report files--mail-source or IPMC_MAIL_SOURCE: local path for MailMCP cached ASF Incubator general-list message files--mail-api-base or IPMC_MAIL_API_BASE: MailMCP/Pony Mail API base URL for live Incubator general-list search--release-dist-base or IPMC_RELEASE_DIST_BASE: ReleaseMCP dist.apache.org base URL or local release directory--release-archive-base or IPMC_RELEASE_ARCHIVE_BASE: ReleaseMCP archive.apache.org base URL or local archive directorySource defaults can also be set once per MCP session with configure_sources. Normal tool calls should only pass task arguments such as podling, limit, or filters; per-tool source arguments are for one-off overrides.
python3 -m unittest discover -s tests -v
python3 -m coverage run -m unittest discover -s tests
python3 -m coverage report -m
Coverage is scoped to the local ipmc package so imported source MCP libraries do not dilute the report.
See docs/architecture.md for the module layout, runtime flow, and testing structure.
These examples show prompts an IPMC member or mentor could type into an MCP client.
Use this when preparing for a monthly Incubator oversight pass:
This gives reviewers a short queue of what changed, what needs attention, and what evidence supports each opinion.
Use this when a mentor wants a fast status check before following up with podling communities:
This keeps source facts, derived concerns, and confidence visible so mentors can decide what needs action versus clarification.
Use this when a reviewer wants to check Incubator general-list discussion alongside podling reports and health signals:
This server is not a board tool, but it can help assemble Incubator context for a human-written board report:
The intended output is briefing material for IPMC judgment, not text that should be copied into a board report without review.
Set source paths once with configure_sources. After that, use the normal tool arguments below; only pass source paths
to an individual tool when you really want to override the session defaults for that one call.
configure_sourcesSet or inspect the source paths used by later tool calls.
recent_changesReturn per-podling recent deltas the IPMC should scan. This is delta-based only: unchanged/static fields are excluded.
Arguments:
as_of_date: optional YYYY-MM-DD date for duration-sensitive viewspodling: optional podling name filterlimit: optional max number of resultssignificant_changesReturn a structured factual subset of recent changes that usually merit IPMC scan attention. This currently includes podlings with no visible releases in the 12-month health window, review-worthy activity shifts between the 3-month and 12-month windows, newly missing reports, and release visibility disappearing.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of resultsinclude_signals: optional signal filter listreporting_gapsReturn podlings with Incubator reporting compliance gaps. Activity signals are intentionally excluded.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of resultsinclude_gaps: optional gap filter listreporting_reliabilityReturn objective reporting reliability patterns over time, grouped into consistently on time, occasional late, repeated late, repeated missing, and reporting data unavailable. Categories compare observed report counts with the expected Incubator cadence: monthly for the first quarter, then quarterly after that. A single missed expected report is treated as an occasional catch-up-next-month case, not a systemic issue. Exact due-date timeliness is not visible from rolling report counts.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of results per categoryinclude_categories: optional reporting reliability category filter listrelease_visibilityReturn release-governance visibility concerns, including no releases in 12 months, release gaps of at least 6 months, and activity-without-release mismatches.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of resultsinclude_signals: optional release visibility signal filter listrelease_vote_evidenceReturn likely MailMCP release vote/result thread evidence for one podling alongside IPMC release visibility signals.
Arguments:
podling: required podling nameas_of_datemail_timespan: optional MailMCP timespan expression, defaults to the MailMCP release-search windowlimit: optional max number of vote/result threadsrelease_artifact_evidenceReturn ReleaseMCP artifact, signature, checksum, cadence, and Incubator naming evidence for one podling.
Arguments:
podling: required podling namerelease_max_depth: optional traversal depth under the podling directory, defaults to 1; use 0 for a shallower scanreporting_cohortReturn current reporting podlings grouped into non-ranked IPMC review buckets: reporting issues, release visibility issues, recent significant changes, and no obvious concerns.
Arguments:
as_of_datepodling: optional podling name filterreport_narrative_signalsReturn report-derived signals from cached Incubator reports, including latest reported issues, recurring issues across report history, possible copy-forward narrative text between consecutive reports, low observed mentor sign-off, and mismatches between report narrative release claims and health-based release visibility.
When podling is provided, this lookup can use non-current or report-cache-only podlings if matching source data is available.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of resultsinclude_signals: optional report narrative signal filter listcross_source_mismatchesReturn concrete mismatches between cached report narrative and current health or release evidence, such as a quiet latest report despite elevated health risk, a reported last release with no 12-month release visibility, or a one-report mentor sign-off drop that differs from the rolling average.
When podling is provided, this lookup can use non-current or report-cache-only podlings if matching source data is available.
Arguments:
as_of_datepodling: optional podling name filterlimit: optional max number of resultsinclude_signals: optional cross-source mismatch filter liststalled_podlingsReturn podlings matching the strict stalled definition: low commits, low committers, low discussion, and no 12-month releases. This is a narrow subset signal, not a replacement for the watchlist.
Arguments:
as_of_datelimit: optional max number of resultsipmc_watchlistReturn podlings that most need IPMC attention based on combined lifecycle and health signals.
Arguments:
as_of_date: optional YYYY-MM-DD date for duration-sensitive viewslimit: optional max number of resultsseverity_at_least: optional minimum severity filterinclude_reasons: optional reason filter listgraduation_readinessAssess whether a podling appears ready, near ready, or not yet ready for graduation.
Arguments:
podling: required podling nameas_of_dateinclude_evidence: optional boolean, defaults to truestrict_mode: optional booleanpodling_briefReturn an IPMC-oriented briefing for one podling.
Arguments:
podling: required podling nameas_of_datefocus: optional area listbrief_format: optional summary or detailedmentoring_attention_neededReturn podlings where mentoring intervention appears necessary.
Arguments:
as_of_datelimit: optional max number of resultsurgency_at_least: optional minimum urgency filterinclude_causes: optional cause filter listcommunity_health_summaryReturn an IPMC-level summary of community-health patterns across podlings.
Arguments:
as_of_datescope: optional all_podlings, active_podlings, or reporting_podlingsgroup_by: optional none, risk_band, mentor_load, or age_bandinclude_examples: optional booleanpodlings_source uses --podlings-source, IPMC_PODLINGS_SOURCE, or the ASF podlings.xml URL.health_source uses --health-source, IPMC_HEALTH_SOURCE, or reports if no startup default is set.report_source uses --report-source, IPMC_REPORT_SOURCE, or .cache/incubator-reports if no startup default is set.mail_source uses --mail-source, IPMC_MAIL_SOURCE, or .cache/incubator-general-mail if no startup default is set. If the default cache is missing, IPMC tools use live MailMCP search as a read-only fallback.mail_api_base uses --mail-api-base, IPMC_MAIL_API_BASE, or the public lists.apache.org API.release_dist_base uses --release-dist-base, IPMC_RELEASE_DIST_BASE, or the public Incubator dist release URL.release_archive_base uses --release-archive-base, IPMC_RELEASE_ARCHIVE_BASE, or the public Incubator archive URL.3m, 6m, 12m, to-date.source field. Health and ReportMCP metadata also preserve the upstream
reports_dir field, and MailMCP metadata preserves cache_dir, for compatibility with their source MCPs.This server keeps source facts separate from derived opinions. Risk and readiness views are derived from:
The resulting outputs are intended to support IPMC judgment, not replace it.
Opinionated outputs include an explainability object so IPMC members can challenge the result:
source_data_used: the podlings, apache-health, ReportMCP, and MailMCP fields that informed the opinionreasoning: human-readable explanation of why the opinion was reachedconfidence: high, medium, or low confidence in the opinion based on source coveragemissing: source evidence that is absent or would improve the assessmentPer-podling tools attach this to podling-level judgments and supporting signals. The community-health summary attaches it to the overall summary and each derived risk theme.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"ipmc-mcp": {
"command": "npx",
"args": []
}
}
}PRs, issues, code search, CI status
Database, auth and storage
Reference / test server with prompts, resources, and tools.
Secure file operations with configurable access controls.