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
Metadata
Release files for pingcode-mcp 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pingcode_mcp-0.1.2.tar.gz | 12.9 kB | Without provenance | Details for pingcode_mcp-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pingcode_mcp-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for pingcode_mcp-0.1.2-py3-none-any.whl |
Total release size: 24.4 kB
Release files / pingcode_mcp-0.1.2.tar.gz
| Download URL | pingcode_mcp-0.1.2.tar.gz |
|---|---|
| Size | 12.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59455422c31555f2a92af312f7af36cf923136e433295f3ae6f42563902130ec
|
|
BLAKE2b-256 checksum How to use checksums |
c21c55f5ab9177ef298a5f0f93901ea358d7c04c8bb17202edea36d88649dcc2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Release files / pingcode_mcp-0.1.2-py3-none-any.whl
| Download URL | pingcode_mcp-0.1.2-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51635b0acb00b0182f78c6421615947ffe4e28940342c9a5bb1ae051375ff6b0
|
|
BLAKE2b-256 checksum How to use checksums |
88829f2c95a0eea9e7b200419a9e844d20453697ca2a0ac6318ecbb499e2bb25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Security for pingcode-mcp 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.