IPMC MCP
A small dependency-free MCP server for Apache Incubator PMC oversight views.
It composes:
- podling lifecycle data from
PodlingsMCP - community and report signals from
apache-health
It exposes opinionated Incubator-level tools to help the IPMC:
- identify podlings needing attention
- assess graduation readiness
- generate podling briefings
- flag mentoring intervention needs
- summarize community-health patterns across podlings
Requirements
- Python 3.12+
Run
python3 server.py
The server uses stdio, so it is intended to be launched by an MCP client.
Install
python3 -m pip install -e .
For development tools:
python3 -m pip install -e .[dev]
Example MCP client config
{
"mcpServers": {
"ipmc": {
"command": "python3",
"args": [
"/Users/justinmclean/IncubatorMCP/server.py",
"--podlings-mcp-repo",
"/Users/justinmclean/PodlingsMCP",
"--health-mcp-repo",
"/Users/justinmclean/HealthMCP",
"--health-source",
"/Users/justinmclean/incubator/tools/health/reports"
]
}
}
}
The default runtime assumes the sibling source MCP repositories and health reports are available at:
/Users/justinmclean/PodlingsMCP/Users/justinmclean/HealthMCPreports, unless--health-sourceis set
Tool calls can also override the source data paths with podlings_source and health_source.
Configure source MCP locations and the health reports directory with startup arguments:
--podlings-mcp-repo: path to thePodlingsMCPcheckout--health-mcp-repo: path to theHealthMCPcheckout--health-source: default apache-health reports directory
Test
python3 -m unittest discover -s tests -v
Coverage
python3 -m coverage run -m unittest discover -s tests
python3 -m coverage report -m
Coverage is scoped to the local ipmc package so imported sibling MCPs do not dilute the report.
Architecture
See docs/architecture.md for the module layout, runtime flow, and testing structure.
Tools
ipmc_watchlist
Return podlings that most need IPMC attention based on combined lifecycle and health signals.
Arguments:
podlings_source: optional URL or local file path forpodlings.xmlhealth_source: optional reports directory for apache-health markdown reportsas_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 namepodlings_sourcehealth_sourceas_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 namepodlings_sourcehealth_sourceas_of_datefocus: optional area listbrief_format: optionalsummaryordetailed
mentoring_attention_needed
Return podlings where mentoring intervention appears necessary.
Arguments:
podlings_sourcehealth_sourceas_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:
podlings_sourcehealth_sourceas_of_datescope: optionalall_podlings,active_podlings, orreporting_podlingsgroup_by: optionalnone,risk_band,mentor_load, orage_bandinclude_examples: optional boolean
Defaults
- When omitted,
podlings_sourcedefaults to the ASFpodlings.xmlURL. - When omitted,
health_sourceuses--health-source, orreportsif that startup argument is unset. - Oversight views focus on current podlings by default.
- Health analysis prefers the freshest available window in this order:
3m,6m,12m,to-date.
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.