Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pingcode_mcp-0.1.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pingcode_mcp-0.1.0-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

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

Hashes for pingcode_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1ea691f06f870d1d72e945569f566f17c6709fb221e821060537885aac80d0ba
MD5 c3058b2a35a799c2d30856b8d35fe993
BLAKE2b-256 5c4dc011408da1cef04447b9d3594a615f643435c78e11a2efb6d5fd1cbbafef

See more details on using hashes here.

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

Hashes for pingcode_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f48a5fb37b5a524c7f1d389833f5f6e49be3c024f8e9219f971117e76b33c481
MD5 57c602173d306a47cb36a5942daec879
BLAKE2b-256 4b9f0b0f5effb5f8751980d0fcbb4fad518e3ee7223f16a022c8c9037e5f2cc2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page