IPMC MCP
Provides tools for Apache Incubator PMC oversight, including identifying podlings needing attention, assessing graduation readiness, generating podling briefings, flagging mentoring intervention needs, and summarizing community-health patterns across Apache podlings.
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., "@IPMC MCPshow me podlings needing attention"
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.
IPMC MCP
A small MCP server for Apache Incubator PMC oversight views.
It composes:
podling lifecycle data from
apache-podlings-mcpcommunity and report signals from
apache-health-mcpcached Incubator report entries from
apache-incubator-reports-mcpcached Incubator general-list messages from
apache-incubator-mail-mcplive Incubator release vote/result thread evidence from
apache-incubator-mail-mcprelease artifact, signature, checksum, cadence, release download page, and optional platform-distribution evidence from
apache-incubator-releases-mcp
It exposes opinionated Incubator-level tools to help the IPMC:
identify podlings needing attention
scan recent podling-level changes
find Incubator reporting gaps
surface recurring or unresolved report-narrative issues from cached Incubator reports
highlight concrete mismatches between report narrative and current health or release evidence
review release visibility and Incubator release vote evidence through a governance lens
identify tightly-defined stalled podlings
assess graduation readiness
generate podling briefings
flag mentoring intervention needs
summarize community-health patterns across podlings
Requirements
Python 3.12+
Install
python3 -m pip install .For development tools:
python3 -m pip install -e .[dev]Run
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-mailFor 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-mailBy default the server uses stdio, so it is intended to be launched by an MCP client.
To serve the same JSON-RPC/MCP protocol over HTTP instead, pass --http:
ipmc-mcp \
--http \
--host 127.0.0.1 \
--port 8080 \
--health-source /path/to/incubator/tools/health/reports \
--report-source /path/to/ReportMCP/.cache/incubator-reports \
--mail-source /path/to/MailMCP/.cache/incubator-general-mailHTTP mode uses the official MCP Streamable HTTP transport at /mcp and exposes a simple GET /health endpoint. --host and --port only affect HTTP mode. For public hosting and Claude connector setup, see docs/hosting.md.
Example MCP client config
{
"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-mcp
When 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-sourceorIPMC_PODLINGS_SOURCE: optional URL or local path forpodlings.xml--health-sourceorIPMC_HEALTH_SOURCE: local path for apache-health report Markdown files--report-sourceorIPMC_REPORT_SOURCE: local path for ReportMCP cached ASF Incubator report files--mail-sourceorIPMC_MAIL_SOURCE: local path for MailMCP cached ASF Incubator general-list message files--mail-api-baseorIPMC_MAIL_API_BASE: MailMCP/Pony Mail API base URL for live Incubator general-list search--release-dist-baseorIPMC_RELEASE_DIST_BASE: optional ReleaseMCP current release base URL or local release directory; when unset, ReleaseMCP discovers the podling download page--release-archive-baseorIPMC_RELEASE_ARCHIVE_BASE: ReleaseMCParchive.apache.orgbase URL or local archive directory--http: serve JSON-RPC/MCP over HTTP instead of stdio--host: HTTP bind host when--httpis set; defaults to127.0.0.1--port: HTTP bind port when--httpis set; defaults to8080
Source 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.
Test
python3 -m unittest discover -s tests -vCoverage
python3 -m coverage run -m unittest discover -s tests
python3 -m coverage report -mCoverage is scoped to the local ipmc package so imported source MCP libraries do not dilute the report.
Architecture
See docs/architecture.md for the module layout, runtime flow, and testing structure.
Usage Examples
These examples show prompts an IPMC member or mentor could type into an MCP client.
Monthly IPMC Review Workflow
Use this when preparing for a monthly Incubator oversight pass:
"What changed across current podlings since the last IPMC review?"
"Which podlings need IPMC attention this month, and why?"
"Which podlings have crossed a year without a visible release, or show a meaningful activity shift?"
"Group this reporting cohort into reporting issues, release visibility issues, recent changes, and no obvious concerns."
"Show me current podlings with reporting gaps, but keep that separate from community health concerns."
"Which podlings have repeated reporting reliability issues rather than a one-off late report?"
"Which current podlings call out unresolved issues in their recent Incubator reports?"
"Show me recurring issues from cached Incubator reports, and flag where the latest report still needs mentor follow-up."
"Compare reported podling issues with health signals and tell me which podlings need follow-up."
"Show me podlings where the latest report narrative and current health evidence point in different directions."
"Which current podlings do not appear to have a recent Incubator report?"
"Highlight podlings where the report narrative and recent health metrics point to different risks."
"Which podlings have release visibility concerns that the IPMC should look at?"
"Which podlings look genuinely stalled, based on low activity, low discussion, and no recent releases?"
"Give me a detailed brief for the podlings that look most concerning."
This gives reviewers a short queue of what changed, what needs attention, and what evidence supports each opinion.
Mentor Checking Their Podlings
Use this when a mentor wants a fast status check before following up with podling communities:
"Give me a focused brief for FooPodling covering reporting, releases, mentoring, and community health."
"What is FooPodling's current Incubator reporting schedule?"
"Does FooPodling look ready for graduation, and what evidence is missing?"
"Show the recent Incubator report evidence for FooPodling, including issues, last release, and observed mentor sign-offs."
"For FooPodling, separate source facts from IPMC interpretation and tell me what I should verify with the community."
"What has FooPodling reported as unfinished issues, and do the health metrics support those concerns?"
"Show me FooPodling's mentor sign-off evidence without treating partial sign-off as a failure."
"Which podlings appear to need mentor intervention?"
"Show me podlings with missing mentor sign-offs or weak mentor coverage."
This keeps source facts, derived concerns, and confidence visible so mentors can decide what needs action versus clarification.
General List Mail Evidence
Use this when a reviewer wants to check Incubator general-list discussion alongside podling reports and health signals:
"Search general incubator mail for recent FooPodling graduation, release, or retirement discussion and summarize the relevant email evidence."
"For FooPodling, compare Incubator report concerns with recent general-list email threads that mention the podling."
"Show likely Incubator release vote and result threads for FooPodling and compare them with release visibility signals."
"Show FooPodling release artifacts, signatures, checksums, and Incubator naming evidence."
Generating a Board Summary
This server is not a board tool, but it can help assemble Incubator context for a human-written board report:
"Summarize the main community-health themes across current podlings, with examples."
"Which high-risk podlings may need narrative attention in the Incubator report?"
"Use recent Incubator reports to identify repeated podling themes that may need IPMC follow-up."
"Find podlings whose report narratives mention graduation blockers and summarize the supporting health evidence."
"Which podlings have recurring issues across their Incubator report history?"
"Give me an evidence-backed list of podlings where the report narrative and release visibility both need attention."
"List reporting compliance issues separately from release-governance concerns."
"Give me short evidence-backed briefs for the podlings most likely to be mentioned by name."
The intended output is briefing material for IPMC judgment, not text that should be copied into a board report without review.
Tools
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_sources
Set or inspect the source paths used by later tool calls.
current_podlings_overview
Return a factual overview of current Incubator podlings from podlings.xml lifecycle metadata, similar to the current-projects table on the Incubator website.
Arguments:
podlings_source: optionalpodlings.xmlsource overrideas_of_date: optionalYYYY-MM-DDdate for incubation durationlimit: optional max number of resultsinclude_descriptions: optional boolean, defaults to true
recent_changes
Return per-podling recent deltas the IPMC should scan. This is delta-based only: unchanged/static fields are excluded.
Arguments:
as_of_date: optionalYYYY-MM-DDdate for duration-sensitive viewspodling: optional podling name filterlimit: optional max number of results
significant_changes
Return 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 list
reporting_gaps
Return 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 list
reporting_reliability
Return 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 list
reporting_schedule
Return expected Incubator reporting cadence, due-this-month status, and next expected reporting period from PodlingsMCP.
Arguments:
as_of_datereport_month: optional reporting month inYYYY-MMformatpodling: optional podling name filterdue_this_month: optional boolean filterlimit: optional max number of results
release_visibility
Return 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 list
release_vote_evidence
Return 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 threads
release_artifact_evidence
Return ReleaseMCP artifact, signature, checksum, cadence, Incubator naming evidence, optional release download page checks, and optional GitHub, Docker Hub, PyPI, and Maven distribution hints for one podling.
Arguments:
podling: required podling namerelease_dist_base: optional current release base URL or local release directory; when omitted, ReleaseMCP discovers the podling download pagerelease_max_depth: optional traversal depth under the podling directory, defaults to1; use0for a shallower scanrelease_page_url: optional Apache project release download page URL or local HTML file to inspect; useautoto let ReleaseMCP discover the pageinclude_platforms: optional boolean; when true, asks ReleaseMCP to include GitHub, Docker Hub, PyPI, and Maven distribution hintsgithub_project: optional apache/ GitHub repository name; defaults to the podling slug in ReleaseMCPdocker_images: optional Docker Hub image names in namespace/repository formpypi_packages: optional PyPI package names; defaults to apache- in ReleaseMCPmaven_group_ids: optional Maven groupIds; defaults to org.apache. in ReleaseMCP
When platform checks are not requested, the platform_distribution_checks response field is an explicit not-requested status rather than null.
When release page checks are not requested, the release_page_checks response field is also an explicit not-requested status.
Pass release_page_url: "auto" to request ReleaseMCP release download page discovery and checks without supplying the page URL.
refresh_report_cache
Refresh cached ASF Incubator report data used by the report-narrative and cross-source tools.
Arguments:
report_source: optional cache directory overrideyears: optional years of history to cachefull_history: optional boolean to cache full history instead of recent reportslimit: optional max number of reports to cachereport_url: optional single report URL to cache instead of refreshing recent reportsreport_id: optional report id for a single report URL
refresh_mail_cache
Refresh cached general@incubator.apache.org message summaries used by mail evidence tools.
Arguments:
mail_source: optional cache directory overridemail_api_base: optional Pony Mail API base URLmail_timespan: optional MailMCP timespan expressionquery: optional search querylimit: optional max number of message summaries to cache
reporting_cohort
Return 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 filter
report_narrative_signals
Return 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 list
cross_source_mismatches
Return 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 list
stalled_podlings
Return 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 results
ipmc_watchlist
Return podlings that most need IPMC attention based on combined lifecycle and health signals.
Arguments:
as_of_date: optionalYYYY-MM-DDdate for duration-sensitive viewslimit: optional max number of resultsseverity_at_least: optional minimum severity filterinclude_reasons: optional reason filter list
graduation_readiness
Assess 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 boolean
podling_brief
Return an IPMC-oriented briefing for one podling.
Arguments:
podling: required podling nameas_of_datefocus: optional area listbrief_format: optionalsummaryordetailed
mentoring_attention_needed
Return 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 list
community_health_summary
Return an IPMC-level summary of community-health patterns across podlings.
Arguments:
as_of_datescope: optionalall_podlings,active_podlings, orreporting_podlingsgroup_by: optionalnone,risk_band,mentor_load, orage_bandinclude_examples: optional boolean
Defaults
When omitted,
podlings_sourceuses--podlings-source,IPMC_PODLINGS_SOURCE, or the ASFpodlings.xmlURL.When omitted,
health_sourceuses--health-source,IPMC_HEALTH_SOURCE, orreportsif no startup default is set.When omitted,
report_sourceuses--report-source,IPMC_REPORT_SOURCE, or.cache/incubator-reportsif no startup default is set.When omitted,
mail_sourceuses--mail-source,IPMC_MAIL_SOURCE, or.cache/incubator-general-mailif no startup default is set. If the default cache is missing, IPMC tools use live MailMCP search as a read-only fallback.When omitted,
mail_api_baseuses--mail-api-base,IPMC_MAIL_API_BASE, or the public lists.apache.org API.When omitted,
release_dist_baseuses--release-dist-baseorIPMC_RELEASE_DIST_BASE; if neither is set, ReleaseMCP discovers the podling download page instead of forcing the public Incubator dist release URL.When omitted,
release_archive_baseuses--release-archive-base,IPMC_RELEASE_ARCHIVE_BASE, or the public Incubator archive URL.Oversight views focus on current podlings by default.
Single-podling lookups can still return non-current or report-cache-only podlings when matching source data is available.
Health analysis prefers the freshest available window in this order:
3m,6m,12m,to-date.Source metadata consistently exposes a
sourcefield. Health and ReportMCP metadata also preserve the upstreamreports_dirfield, and MailMCP metadata preservescache_dir, for compatibility with their source MCPs.
Opinion Model
This server keeps source facts separate from derived opinions. Risk and readiness views are derived from:
mentor coverage
reporting reliability
mentor sign-off signals
community activity
release visibility
incubation duration
participation breadth
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 assessment
Per-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.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/justinmclean/IncubatorMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server