Novacal MCP

by ste7

Not rated
GitHub

About

Manage your Novacal calendar from your AI client — browse event types, check availability, and book, reschedule, or cancel events.

Details

Author
ste7
Categories
Productivity

Setup

Install Novacal MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/ste7/events-mcp-server

Follow the installation instructions in the repository README, then restart your MCP client.

A remoteMCPserver forNovacal. It gives your AI client eight tools to read your event types, check availability, and book, reschedule, or cancel meetings.

It runs as a single Cloudflare Worker and speaks Streamable HTTP. You connect once with OAuth, paste your Novacal API key, and your client keeps working from there.

The hosted server is athttps://mcp.novacal.io/mcp.

claude mcp add --transport http novacal https://mcp.novacal.io/mcp

Cursor, Windsurf, or any client with an MCP config file

{ "mcpServers": { "novacal": { "type": "http", "url": "https://mcp.novacal.io/mcp" } } }

Add a custom connector and paste the same URL.

On first connect your client opens the sign-in page. Paste your Novacal API key and press Connect. That is the whole setup.

Read tools are marked read-only and idempotent.novacal_cancel_eventis marked destructive, so clients that ask before destructive calls will ask.

novacal_get_event_typestakes an optionalscope:

{ "scope": "personal" }

Usepersonalfor your own event types andteamfor team event types. Leave it out to get both. The server tells the model to preferpersonalunless you ask for a team event type.

startandendare plainYYYY-MM-DDdates. The range isstart-inclusiveandend-exclusive:

For a single day, pass the next day asend:

{ "event_type_id": 123, "start": "2026-05-29", "end": "2026-05-30", "timezone": "Europe/Amsterdam" }

That returns availability for May 29, 2026. Passing the same date forstartandendis an empty range and returns nothing.

timezonetakes an IANA name such asEurope/Amsterdam,America/New_York, orAsia/Tokyo. It defaults toUTCwhen omitted.

On connect the server reads your Novacal profile timezone and puts it in the server instructions. So the model reads relative dates in your timezone and shows times in your timezone, unless you ask for another one.
- Your client starts an OAuth flow against the Worker.
- The Worker serves/authorizeand asks for your Novacal API key.
- It verifies the key withGET /v1/users/me.
- It encrypts the key into the OAuth session props and completes the flow.

The key is only recoverable with your access token. It is never written to storage in readable form, never echoed back into the page, and is kept out of the grant metadata, which is stored unencrypted.

Removing the connection in your client does not revoke the key. To cut off access, rotate the key in Novacal.

You need Node 20+ and a Cloudflare account for deploys.

npm run devuses thedevWrangler environment. It simulates KV and D1 locally and points at a Novacal API onhttp://localhost:8010, so it never touches production resources.

npm run check # tsc --noEmit npm run lint # biome check npm run format # biome check --write npm test # vitest run

CI runscheck,lint, andteston every push and pull request.

npx wrangler kv namespace create OAUTH_KV npx wrangler d1 create novacal-mcp-server-db

Copy the returned IDs intowrangler.tomlunderOAUTH_KVandDB, then apply the schema:

npx wrangler d1 execute novacal-mcp-server-db --remote --file=./migrations/0001_user_credentials.sql

Note:theuser_credentialstable is legacy. Credentials now live in the encrypted OAuth session and nothing reads or writes this table. It and theDBbinding stay only so existing deployments keep validating.

src/ ├── index.ts OAuthProvider wiring, /authorize, metadata routes ├── auth.ts API key verification and the sign-in page ├── mcp.ts tool registration and server instructions ├── api.ts Novacal HTTP client, UpstreamApiError, 30s timeout ├── responses.ts okResult / failedResult envelopes ├── types.ts Env, session props, Novacal types └── handlers/ ├── event-types.ts list, get, create ├── events.ts list, create, cancel, reschedule └── availability.ts availability lookup

Handlers are plain async functions with no MCP imports, so they are easy to test on their own. Every tool wraps its handler in atry/catchand returns anisErrorresult instead of throwing. Failures reach the model as a short hint, not a raw JSON dump:

401 — Novacal API key is invalid or revoked. Re-authorize at /authorize. 429 — Rate limited by the Novacal API. Wait a moment before retrying.

Calls to the Novacal API time out after 30 seconds.

- Novacal
-
Model Context Protocol
-
MCP registry entry—io.github.ste7/novacal-mcp-server

The 1Password MCP server creates a bridge that allows MCP clients such as Codex and Kiro to manage your 1Password Environments with secure authorization prompts.

This is the 1st, easiest, and cheapest PPT, slides, presentation AI generation MCP Server in the world.

Persistent memory for any AI assistant. Zero token cost until recall. Stores memories in local SQLite, ranks by 6-factor scoring, returns results 79% smaller than JSON. Works with Claude, ChatGPT, Grok, Cursor, Windsurf, and any MCP client.

A MCP server that enables AI assistants to interact with Anki, the spaced repetition flashcard application.

Enables LLM clients to interact with macOS applications through AppleScript. Built using the @beyondbetter/bb-mcp-server library, this server provides safe, controlled execution of predefined scripts with optional support for arbitrary script execution.

An MCP server for WordPress plugin audits

Turn your AI assistant into a digital marketing hub that creates, organizes, and analyzes links and QR Codes on demand.

Connect AI clients to Cal.com scheduling through the Model Context Protocol using the hosted server at mcp.cal.com or a local instance.

Sync Calendars, Scheduling Links, AI Executive Scheduling Assistant, Unified Calendar

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.