First release published to the official MCP Registry.
The server is now discoverable as io.github.iflytek/dolphin-mcp-pilot, so MCP hosts and AI assistants can find and install it without being pointed at this repository by hand.
Install
Docker (the OCI package the registry entry points at):
docker run --rm -p 8001:8001 \
-e DS_URL=http://your-dolphinscheduler:12345/dolphinscheduler \
-e DS_USER=admin -e DS_PASSWORD=your-password \
ghcr.io/iflytek/dolphin-mcp-pilot:0.3.1The MCP endpoint is http://localhost:8001/mcp/ — the trailing slash is required.
From source: see docs/INSTALLATION.md.
A PyPI package is in progress (#44); until it lands, Docker and source are the supported paths.
Compatibility
DolphinScheduler 3.x. The monitor and user tools try the current endpoints first and fall back to the pre-3.2.2 paths on 404, so 3.2.1 and 3.2.2+ deployments both work from the same image. The e2e suite runs against a 3.4.2 standalone server.
Added
- MCP Registry publishing (#20):
server.jsonmanifest plus a
publish-registryjob inrelease.yml, gated onneeds: build-and-pushso
publication cannot race the image push it depends on. A separate manual
publish-registry.ymlcovers recovery, and re-checks that the versioned
ghcr.ioimage exists and carries the
io.modelcontextprotocol.server.nameownership label before publishing.
Authentication uses GitHub OIDC (login github-oidc);server.jsonis
validated against its declared schema beforepublishso a rejected
manifest fails the build instead of leaving a tag with nothing published. - MCP 2026-07-28 stateless protocol support through the MCP Python SDK 2.x
(#22). - CI compatibility coverage for both an MCP 1.29 legacy client and an MCP 2.0
client against the same HTTP server (#22). - E2E integration tests driven by docker-compose against a real
DolphinScheduler standalone server (#15), with read-only module coverage and
a forced-404 unit test pinning the monitor endpoint fallback order. - Community case-study gallery under
cases/(#24), with six accepted
studies: release-gate recovery (#38), safe weekday schedule change (#39),
human-gated project cleanup (#41), request-scoped team isolation (#46), and
nightly-ETL / incident firefighting (#40). - DeepWiki badge in the README (#18).
Changed
- Replaced the private FastMCP/session-manager integration with the public
MCPServer.streamable_http_app()API (#22). - HTTP runs statelessly. MCP 2.0 requests never receive
Mcp-Session-Id;
legacy clients remain supported by a per-request compatibility transport
(#22). - Raised the runtime dependency floor to
mcp>=2,<3,anyio>=4.9,
uvicorn>=0.31.1, andpydantic>=2.13.4(#22, #35). - Monitor and user tools now target the current DolphinScheduler endpoints
(/monitor/{nodeType},/users/list-all) and fall back to the legacy
lowercase paths on404, so 3.2.1 and 3.2.2+ deployments both work from one
code base (#36). - Expanded the README quick start and use-case sections (#37), and documented
the DolphinScheduler compatibility target. - CI action bumps:
actions/checkout4 → 7 (#29),
actions/setup-python5 → 7 (#48),actions/upload-artifact4 → 7 (#28),
docker/setup-qemu-action3 → 4 (#32),docker/login-action3 → 4 (#31),
docker/setup-buildx-action3 → 4 (#30),
docker/build-push-action6 → 7 (#47),
docker/metadata-action5 → 6 (#49),pytestfloor → 7.4.4 (#34).
Fixed
- Request authentication context is now restored after every HTTP request so
credentials cannot carry over to a later unauthenticated request (#22). - The
io.modelcontextprotocol.server.namelabel now sits on the final
runtime stage of the Dockerfile. On thebuilderstage it was absent from
the image actually pushed toghcr.io, which is the one the registry
inspects to verify namespace ownership (#20). server.jsonadvertises the endpoint the container really serves,
http://localhost:8001/mcp/, matchingMCP_PORT=8001,EXPOSE 8001, and
the documented trailing slash (#20).- The
workflow_dispatchversion input is passed throughenv:and validated
against aMAJOR.MINOR.PATCHpattern rather than interpolated into a shell
script, closing a script-injection path in a job that holds
id-token: write(#20).
The HTTP endpoint remains /mcp/, and stdio behavior is unchanged.
Full diff: v0.3.0...v0.3.1