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.1.tar.gz (12.6 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.1-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pingcode_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 12.6 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.1.tar.gz
Algorithm Hash digest
SHA256 14153dc0ea71706691dc0bcc2f9efa4ee8ea6df7698193c7a628416fe9f5777e
MD5 1b97029aa52172c0e4fcd5c843c1582d
BLAKE2b-256 2af1f17e4193e289b0914c5c3c0bac5df6fe5bfc29fe6bb4313fed96d1cf0886

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pingcode_mcp-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b823d352349e9a2e8dee48fd9e7781b3b3be8fb847eb079b007413497ddfa634
MD5 1422ace22a83d4c60e636fb360966002
BLAKE2b-256 db3ba2d092b7d6282af83602cae0cdccd1c983ac9bf595566187834054f9f035

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