loading…
Search for a command to run...
loading…
An MCP server for accessing and analyzing Apache Software Foundation Incubator podling data from podlings.xml. It provides tools to query podling metadata, gene
An MCP server for accessing and analyzing Apache Software Foundation Incubator podling data from podlings.xml. It provides tools to query podling metadata, generate statistics, and analyze incubation trends over time.
A small dependency-free MCP server for working with Apache Software Foundation Incubator podlings.xml data.
It exposes tools to:
If source is omitted, the server defaults to https://incubator.apache.org/podlings.xml.
The default ASF podlings XML source is cached locally for 24 hours. Set PODLINGS_MCP_CACHE_DIR to override the cache directory.
python3 -m pip install .
For development tools:
python3 -m pip install -e .[dev]
After installation, run the stdio MCP server with:
podlings-mcp
For local development without installing first, you can still run:
python3 server.py
The server uses stdio, so it is intended to be launched by an MCP client.
It accepts standard JSON-RPC 2.0 request objects and non-empty batches, ignores notifications, and returns structured JSON-RPC errors for malformed input, invalid request shapes, unknown methods, and invalid MCP tool parameters.
python3 -m unittest discover -s tests -v
The tests cover parser behavior, tool functions, error cases, and a small end-to-end MCP stdio exchange.
make format
make check-format
make test
make coverage
make lint
make typecheck
make check
Formatting and linting use ruff, including make check-format for CI-style format verification, and type checking uses mypy. See docs/architecture.md for the current module layout.
{
"mcpServers": {
"podlings": {
"command": "podlings-mcp"
}
}
}
The package also keeps apache-podlings-mcp as a backwards-compatible command alias.
sponsor_type defaults to incubator across the filtering and analytics tools.completed means podlings that reached an end state: graduated or retired.enddate to place outcomes into a year.startdate and enddate to calculate months to graduate or retire.completed_podlings_by_year returns both lists by default, and the graduated_podlings_by_year and retired_podlings_by_year tools are convenience wrappers over that same lookup.reporting_schedule is schedule-aware, not submission-aware: it answers cadence, due-this-month, and expected-period questions from podlings.xml scheduling metadata only.list_podlingsList podlings from podlings.xml.
Arguments:
source: URL or local file pathstatus: optional exact status filtersponsor_type: optional sponsor type filter, defaults to incubatorsearch: optional case-insensitive name/description/champion searchlimit: optional max number of results to returnsource is optional and defaults to the ASF Incubator podlings.xml URL.
list_current_podlingsList podlings with status="current".
Arguments:
source: URL or local file pathsponsor_type: optional sponsor type filter, defaults to incubatorsearch: optional case-insensitive name/description/champion searchlimit: optional max number of results to returnsource is optional and defaults to the ASF Incubator podlings.xml URL.
list_graduated_podlingsList podlings with status="graduated".
Arguments:
source: URL or local file pathsponsor_type: optional sponsor type filter, defaults to incubatorsearch: optional case-insensitive name/description/champion searchlimit: optional max number of results to returnsource is optional and defaults to the ASF Incubator podlings.xml URL.
list_retired_podlingsList podlings with status="retired".
Arguments:
source: URL or local file pathsponsor_type: optional sponsor type filter, defaults to incubatorsearch: optional case-insensitive name/description/champion searchlimit: optional max number of results to returnsource is optional and defaults to the ASF Incubator podlings.xml URL.
get_podlingReturn a single podling by name.
Arguments:
source: URL or local file pathname: podling namesource is optional and defaults to the ASF Incubator podlings.xml URL.
podling_statsReturn summary statistics for a podlings.xml source.
Arguments:
source: URL or local file pathsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
The stats include sponsor classification so you can distinguish:
incubator: sponsored by the Incubatorproject: sponsored by another ASF project/PMCunknown: no sponsor value was foundmentor_count_statsReturn mentor coverage and mentor-count distribution stats for a podlings.xml source.
Arguments:
source: URL or local file pathsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
raw_podlings_xml_infoReturn source metadata and a small preview of parsed records for troubleshooting.
Arguments:
source: URL or local file pathsource is optional and defaults to the ASF Incubator podlings.xml URL.
graduation_rate_over_timeReturn yearly graduation and retirement counts plus graduation rate based on podling enddate.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
podlings_started_over_timeReturn yearly podling start counts based on startdate.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
started_podlings_by_yearReturn the podlings that started in a specific year.
Arguments:
source: URL or local file pathyear: required year to inspectsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
active_podlings_by_yearReturn yearly active-podling counts based on lifecycle span.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
active_podlings_in_yearReturn the podlings that were active during a specific year.
Arguments:
source: URL or local file pathyear: required year to inspectsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
completion_rate_over_timeReturn yearly completion rate using completed outcomes divided by active population.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
completion_count_over_timeReturn yearly completed podling counts based on enddate, split into graduated and retired outcomes.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
completed_podlings_by_yearReturn the podlings that completed in a specific year, split into graduated and retired outcomes.
Arguments:
source: URL or local file pathyear: required year to inspectstatus: optional filter, graduated or retiredsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
completed_podlings_in_rangeReturn the podlings that completed within an inclusive year range.
Arguments:
source: URL or local file pathstart_year: required inclusive start yearend_year: required inclusive end yearstatus: optional filter, graduated or retiredsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
graduated_podlings_by_yearReturn the podlings that graduated in a specific year.
Arguments:
source: URL or local file pathyear: required year to inspectsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
retired_podlings_by_yearReturn the podlings that retired in a specific year.
Arguments:
source: URL or local file pathyear: required year to inspectsponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
graduation_time_over_timeReturn yearly time-to-graduate stats in months based on podling startdate and enddate, including average, median, and percentile views.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
time_to_retirement_over_timeReturn yearly time-to-retirement stats in months based on podling startdate and enddate, including average, median, and percentile views.
Arguments:
source: URL or local file pathstart_year: optional inclusive start year filterend_year: optional inclusive end year filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
reporting_scheduleReturn reporting cadence and expected reporting periods for current podlings, or for a specific named podling.
Arguments:
source: URL or local file pathname: optional exact podling name lookupas_of_date: optional ISO date used for schedule evaluation, defaults to todayreport_month: optional reporting month in YYYY-MM format; defaults to the active reporting cycle derived from as_of_datedue_this_month: optional boolean filtersponsor_type: optional sponsor type filter, defaults to incubatorsource is optional and defaults to the ASF Incubator podlings.xml URL.
These examples show natural-language requests an MCP client can answer with the tools below.
Use these when preparing for a regular review of the active Incubator podling roster:
This gives reviewers a quick view of the active roster, basic metadata coverage, and mentor coverage without needing to inspect podlings.xml directly.
Use these when preparing the monthly IPMC reporting cycle:
This gives the IPMC a schedule-oriented view based on podlings.xml reporting metadata without needing a separate Clutch-style workflow.
When report_month is omitted, the tool treats the current cycle as running through the third Wednesday of the month, then rolls forward to the next month's cycle.
Use these when trying to understand how a group of podlings moved through incubation over time:
This connects yearly trends to the specific podlings behind those trends.
Use these when reviewing graduation and retirement outcomes for a period:
This is useful for turning trend charts into a concrete list of podlings to discuss.
Use these when reviewing how long podlings take to reach terminal outcomes:
This separates completion volume from time-to-outcome trends.
Use these when a local XML file or alternate URL does not produce the expected results:
/path/to/podlings.xml and show me the source metadata plus a few parsed records."/path/to/podlings.xml."/path/to/podlings.xml, show me the parsed record for ExampleOne."/path/to/podlings.xml, show yearly completion counts from 2020 onwards."This helps separate source-loading issues from filtering or analytics questions.
https://incubator.apache.org/podlings.xml/path/to/podlings.xmlpodlings.xml structure directly.sponsor_type default to incubator.sponsor_type values are incubator, project, and unknown.Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"podlings-mcp": {
"command": "npx",
"args": []
}
}
}