Skip to main content

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)

Source distribution for pingcode-mcp 0.1.2
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)

Table of built distributions (wheels) for pingcode-mcp 0.1.2
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page