Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ jobs:
uses: softprops/action-gh-release@v3
with:
generate_release_notes: true
files: dist/pcm-mcp.mcpb
files: dist/pcmstack.mcpb
6 changes: 3 additions & 3 deletions .lintstagedrc.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"*.json": ["biome check --write", "biome lint --write"],
"*.ts": ["biome check --write", "biome lint --write"],
"*.js": ["biome check --write", "biome lint --write"]
"*.json": ["biome check --write"],
"*.ts": ["biome check --write"],
"*.js": ["biome check --write"]
}
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center">
<img src="assets/icon.png" alt="PCM MCP" width="150" />
<img src="assets/icon.png" alt="PCMStack MCP Server" width="150" />
</p>

<h1 align="center">Pro Cycling Manager MCP Server</h1>
Expand All @@ -9,13 +9,13 @@
</p>

<p align="center">
<a href="https://www.npmjs.com/package/pcm-mcp"><img src="https://img.shields.io/npm/v/pcm-mcp.svg" alt="npm version" /></a>
<a href="https://github.com/PCMStack/mcp/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/pcm-mcp.svg" alt="license" /></a>
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/pcm-mcp.svg" alt="node version" /></a>
<a href="https://www.npmjs.com/package/@pcmstack/mcp"><img src="https://img.shields.io/npm/v/%40pcmstack%2Fmcp.svg" alt="npm version" /></a>
<a href="https://github.com/PCMStack/mcp/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/%40pcmstack%2Fmcp.svg" alt="license" /></a>
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/%40pcmstack%2Fmcp.svg" alt="node version" /></a>
<a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-blue.svg" alt="MCP compatible" /></a>
Comment thread
mpicciolli marked this conversation as resolved.
</p>

`pcm-mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server that lets AI assistants such as Claude Desktop, ChatGPT and Gemini query your [Pro Cycling Manager](https://www.cyanide-studio.com/) (PCM) databases. Ask about a cyclist's ratings, browse a team's roster, run SQL against the database, or generate a race startlist, all in plain language.
`@pcmstack/mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server that lets AI assistants such as Claude Desktop, ChatGPT and Gemini query your [Pro Cycling Manager](https://www.cyanide-studio.com/) (PCM) databases. Ask about a cyclist's ratings, browse a team's roster, run SQL against the database, or generate a race startlist, all in plain language.

> [!IMPORTANT]
> This server never modifies your existing files. PCM stores its data as binary `.cdb` files; each call re-reads the `.cdb` from disk and loads it into an **in-memory** SQLite database. Every read tool leaves the source untouched. The write tools, `pcm_update_database` and `pcm_update_cyclist_ratings`, serialize their changes to a **new** `.cdb` file (`outputPath`) and refuse to overwrite the input, so keep your original as a backup.
Expand Down Expand Up @@ -51,7 +51,7 @@ That is why one tool speaks of saves and the rest speak of databases:
<details open>
<summary><strong>MCP Bundle (Claude Desktop, no terminal)</strong></summary>

Download the latest `pcm-mcp.mcpb` from the [Releases page](https://github.com/PCMStack/mcp/releases) and open it with **Claude for macOS or Windows**. An installation dialog appears, no terminal required.
Download the latest `pcmstack.mcpb` from the [Releases page](https://github.com/PCMStack/mcp/releases) and open it with **Claude for macOS or Windows**. An installation dialog appears, no terminal required.

> [!NOTE]
> This method does not auto-update. To get a newer version, download and re-install the latest `.mcpb` from the Releases page.
Expand All @@ -66,9 +66,9 @@ Add the following to your client's MCP configuration file (`claude_desktop_confi
```json
{
"mcpServers": {
"pcm-mcp": {
"pcmstack": {
"command": "npx",
"args": ["-y", "pcm-mcp"]
"args": ["-y", "@pcmstack/mcp"]
}
}
}
Expand Down Expand Up @@ -126,7 +126,7 @@ npm run test:watch # vitest in watch mode
npm run coverage # vitest with v8 coverage
npm run lint # biome lint --write . (autofixes)
npm run format # biome format --write .
npm run pack # produce dist/pcm-mcp.mcpb
npm run pack # produce dist/pcmstack.mcpb
```

To debug the server interactively with the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
Expand Down
Binary file modified assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"manifest_version": "0.3",
"name": "pcm-mcp-server",
"name": "pcmstack",
"display_name": "PCMStack",
"version": "0.4.1",
"description": "MCP server for querying and editing Pro Cycling Manager game databases",
"long_description": "MCP server for querying and editing Pro Cycling Manager game databases. PCM stores its data as binary .cdb database files. Your own saves, but also the official releases and community updates. This server discovers your saves, and inspects and queries any .cdb via the MCP protocol, so AI assistants can explore it in a structured way. Write tools never modify the source: edits are always serialized to a new .cdb file, and existing files are never overwritten.",
Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
{
"name": "pcm-mcp",
"name": "@pcmstack/mcp",
"version": "0.4.1",
"description": "MCP server for querying and editing Pro Cycling Manager game databases",
"type": "module",
"bin": {
"pcm-mcp": "dist/index.js"
"pcmstack": "dist/index.js"
},
Comment thread
mpicciolli marked this conversation as resolved.
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "tsup",
"dev": "tsup --watch",
Expand All @@ -19,7 +22,7 @@
"test:watch": "vitest",
"coverage": "vitest run --coverage",
"prepare": "husky",
"pack": "mcpb pack . dist/pcm-mcp.mcpb",
"pack": "mcpb pack . dist/pcmstack.mcpb",
"start": "node ./dist/index.js",
"start:dev": "tsup --watch --onSuccess \"node ./dist/index.js\""
},
Expand Down
4 changes: 2 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const { version, description } = JSON.parse(
) as { version: string; description: string };

const server = new McpServer({
name: "pcm-mcp",
name: "pcmstack",
version,
description,
});
Comment thread
mpicciolli marked this conversation as resolved.
Expand All @@ -19,7 +19,7 @@ registerTools(server);
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("PCM MCP Server running on stdio");
console.error("PCMStack MCP Server running on stdio");
}

main().catch((error) => {
Expand Down
Loading