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.2.tar.gz (12.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.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file pingcode_mcp-0.1.2.tar.gz.

File metadata

  • Download URL: pingcode_mcp-0.1.2.tar.gz
  • Upload date:
  • Size: 12.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.2.tar.gz
Algorithm Hash digest
SHA256 59455422c31555f2a92af312f7af36cf923136e433295f3ae6f42563902130ec
MD5 eab4a525b2e29f2c0ce3dfc7aa5bccfb
BLAKE2b-256 c21c55f5ab9177ef298a5f0f93901ea358d7c04c8bb17202edea36d88649dcc2

See more details on using hashes here.

File details

Details for the file pingcode_mcp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pingcode_mcp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 51635b0acb00b0182f78c6421615947ffe4e28940342c9a5bb1ae051375ff6b0
MD5 914b52fb1d6ba5de76f3efa7b0d2a1d8
BLAKE2b-256 88829f2c95a0eea9e7b200419a9e844d20453697ca2a0ac6318ecbb499e2bb25

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