MCP server for PingCode project management — manage projects, sprints, and work items via any MCP client.
Project description
PingCode MCP Server
MCP server for PingCode project management. Manage projects, sprints, and work items (stories, bugs, tasks, epics) from any MCP client.
Built with Python, OAuth2 authentication, and the FastMCP framework.
Features
- 10 MCP tools covering full CRUD for work items, sprint listing, project listing, and metadata queries
- OAuth2 client credentials authentication (no browser required)
- Auto-pagination for large result sets
- Retry with exponential backoff on transient failures
- Docker support for one-command deployment
Quick Start
1. Get PingCode OAuth2 Credentials
In PingCode admin panel: Settings → Applications → Create App to obtain client_id and client_secret.
2. Configure
cp .env.example .env
# Edit .env with your credentials
3. Run
Option A: Docker (recommended)
docker compose up --build -d
Option B: Local (development)
pip install -e ".[dev]"
pingcode-mcp-server
4. Connect to Claude Code
Add to ~/.claude.json:
Docker mode:
{
"mcpServers": {
"pingcode-mcp": {
"command": "docker",
"args": ["run", "--rm", "-i", "--env-file", "/path/to/pingcode-mcp/.env", "pingcode-mcp:latest"]
}
}
}
Local mode (with uv):
{
"mcpServers": {
"pingcode-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/pingcode-mcp", "pingcode-mcp-server"]
}
}
}
Tools
| Tool | Description |
|---|---|
pingcode_list_projects |
List accessible projects |
pingcode_list_sprints |
List sprints in a project |
pingcode_list_work_items |
Search/filter work items |
pingcode_get_work_item |
Get work item details |
pingcode_create_work_item |
Create a work item |
pingcode_update_work_item |
Update work item fields |
pingcode_delete_work_item |
Delete a work item |
pingcode_get_work_item_types |
Get types (story, bug, task...) |
pingcode_get_work_item_states |
Get states for a type |
pingcode_get_work_item_priorities |
Get priority levels |
Configuration
| Environment Variable | Required | Default | Description |
|---|---|---|---|
PINGCODE_CLIENT_ID |
Yes | — | OAuth2 client ID |
PINGCODE_CLIENT_SECRET |
Yes | — | OAuth2 client secret |
PINGCODE_BASE_URL |
No | https://open.pingcode.com |
API base URL |
PINGCODE_DEFAULT_PROJECT_ID |
No | — | Default project ID |
Testing
# Install dev dependencies
pip install -e ".[dev]"
# Run unit tests
pytest tests/unit/
# Run unit tests with coverage
pytest tests/unit/ --cov=pingcode_mcp --cov-report=term-missing
# Run E2E tests (requires .env with real credentials)
pytest -m e2e
Project Structure
src/pingcode_mcp/
├── config.py # Environment variable loading
├── client.py # Async PingCode API client (OAuth2, retry, pagination)
├── server.py # FastMCP entry point
└── tools/
├── projects.py # Project listing
├── sprints.py # Sprint listing
├── work_items.py # Work item CRUD
└── metadata.py # Types, states, priorities
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pingcode_mcp-0.1.0.tar.gz.
File metadata
- Download URL: pingcode_mcp-0.1.0.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ea691f06f870d1d72e945569f566f17c6709fb221e821060537885aac80d0ba
|
|
| MD5 |
c3058b2a35a799c2d30856b8d35fe993
|
|
| BLAKE2b-256 |
5c4dc011408da1cef04447b9d3594a615f643435c78e11a2efb6d5fd1cbbafef
|
File details
Details for the file pingcode_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pingcode_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f48a5fb37b5a524c7f1d389833f5f6e49be3c024f8e9219f971117e76b33c481
|
|
| MD5 |
57c602173d306a47cb36a5942daec879
|
|
| BLAKE2b-256 |
4b9f0b0f5effb5f8751980d0fcbb4fad518e3ee7223f16a022c8c9037e5f2cc2
|