npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@redcollar/ganttpro-mcp

v1.0.1

Published

Local Model Context Protocol (MCP) server exposing the full app.ganttpro.com REST API as tools.

Downloads

181

Readme

ganttpro-mcp

A local Model Context Protocol (MCP) server that exposes the full app.ganttpro.com REST API (https://api.ganttpro.com/v1.0) as MCP tools. Runs locally over stdio — your API key and data never pass through a third party.

What it covers

One MCP tool per documented GanttPRO endpoint (43 tools) across every resource group:

| Group | Tools | |-------|-------| | Projects | list_projects, create_project, get_project, update_project, get_task_fields, get_calendars, create_custom_day, update_custom_day, delete_custom_day | | Tasks | list_tasks, create_task, get_task, update_task, delete_task, assign_resource, update_assigned_resource, unassign_resource | | Comments | list_comments, get_comments_by_project, create_comment, update_comment, delete_comment | | Links | create_link, get_link, update_link, delete_link | | Time logs | list_time_logs, get_time_logs_by_project, create_time_log, update_time_log, delete_time_log | | Resources | list_resources | | Attachments | list_attachments, create_attachment, delete_attachment | | Team / Users | get_team, list_users, get_user, update_user | | Roles / Reference | get_account_roles, get_project_roles, get_languages, get_colors |

All tools are prefixed ganttpro_ (e.g. ganttpro_create_task).

Write endpoints (create_*/update_*) accept any extra body field beyond the documented ones (additionalProperties: true), so the server keeps working if GanttPRO adds new fields.

Quick start (no clone, no install)

The only prerequisite is Node.js (LTS). The server runs straight from npm via npx — no clone, no npm install, no paths:

# verify your API key works
GANTTPRO_API_KEY=xxxx npx -y @redcollar/ganttpro-mcp check

# print a ready-to-paste config for your client
npx -y @redcollar/ganttpro-mcp config claude     # or: cursor | cherry | librechat | (none = all)

Get your API key from app.ganttpro.com → Account settings → API. It is sent on every request as the X-API-KEY header.

CLI commands

| Command | Purpose | |---------|---------| | npx -y @redcollar/ganttpro-mcp | Run the MCP server on stdio (how clients launch it) | | npx -y @redcollar/ganttpro-mcp check | Verify the API key (lists projects, prints ✅/❌) | | npx -y @redcollar/ganttpro-mcp config [client] | Print a ready-to-paste config (claude, cursor, cherry, librechat) | | npx -y @redcollar/ganttpro-mcp help | Usage |

Environment variables

| Var | Required | Default | Purpose | |-----|----------|---------|---------| | GANTTPRO_API_KEY | ✅ | — | Your GanttPRO API key | | GANTTPRO_BASE_URL | — | https://api.ganttpro.com/v1.0 | API base URL override | | GANTTPRO_ARRAY_FORMAT | — | brackets | Array/object query serialization: brackets (id[]=1), repeat (id=1&id=2), or comma (id=1,2) |

Add to a client

Paste this into your client config (Claude Desktop claude_desktop_config.json, Cursor ~/.cursor/mcp.json, or .mcp.json):

{
  "mcpServers": {
    "ganttpro": {
      "command": "npx",
      "args": ["-y", "@redcollar/ganttpro-mcp"],
      "env": { "GANTTPRO_API_KEY": "your-api-key-here" }
    }
  }
}

Or, in Claude Code:

claude mcp add ganttpro --env GANTTPRO_API_KEY=your-api-key-here -- npx -y @redcollar/ganttpro-mcp

Then restart the client and check it connects.

Which clients work

Local stdio servers run in desktop apps (Claude Desktop, Cursor, Cherry Studio) and self-hosted LibreChat (admin-configured via librechat.yaml). The web ChatGPT supports MCP only over remote HTTP, and the web DeepSeek has no MCP client — for those, use a desktop app (with ChatGPT/DeepSeek as the model) and connect GanttPRO there.

Local development

cd ganttpro-mcp
npm install
npm test                              # offline unit + handshake tests (27)
GANTTPRO_API_KEY=xxxx node index.js   # run the server directly from source

Usage notes

  • Rate limit: GanttPRO allows ~5 write requests/second (insert/update/delete). The server forwards calls 1:1 — batch large operations accordingly.
  • Dates: pass dates as strings in the format your GanttPRO account expects (e.g. "2026-06-04").
  • Filtering tasks: range filters (progress, duration, startDate, …) take objects like { "from": 0, "to": 0.5 }; list filters (status, priority, …) take arrays.
  • Each tool result is HTTP <status> OK/ERROR followed by the JSON response body. Non-2xx responses come back with isError: true.

Layout

ganttpro-mcp/
├── index.js                # CLI dispatcher: server (default) / check / config / help
├── src/
│   ├── endpoints.js        # data-only catalog of every API endpoint
│   ├── client.js           # request building + fetch (unit-testable)
│   ├── tools.js            # endpoint specs -> MCP tools + dispatch
│   ├── server.js           # MCP Server wiring (ListTools / CallTool)
│   ├── cli.js              # check / config / help logic
│   └── config-snippets.js  # per-client config templates (npx-based)
└── test/
    ├── smoke.test.js       # client/tools unit tests (mocked fetch)
    ├── server.test.js      # real Client<->Server handshake
    └── cli.test.js         # check / config / help tests

License

MIT