Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Novacal MCP Server

by ste7version 0.1.0i★ –iRuns in the cloud
Registry nameio.github.ste7/novacal-mcp-server

Install

Overview

Description from the maker (original English)

Manage Novacal event types, availability, and bookings.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • The registry lists no key to fill in.

You need

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://mcp.novacal.io/mcp

Run this in your terminal

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

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

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

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

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

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://mcp.novacal.io/mcp

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

We have not read this server’s tool list yet; we check endpoints in rotation.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 10, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account ste7, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • … Not checked yet

    Endpoint responds

    Not checked yet; we check endpoints in rotation

  • … Not checked yet

    Sign-in with OAuth

    Not checked yet; we check endpoints in rotation

  • … Not checked yet

    No hidden instructions in tool descriptions

    Not checked yet; we read the tool list when we check the endpoint

Compared with others in Otheri

  • More stars than 0% of the other 19010 servers in this category
  • Published to the registry more recently than 17% of the other 19010 servers in this category
  • Basic checks equal to or better than 100% of the other 19010 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Novacal MCP Server safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.1.0) reached the registry 3 months ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, SWATGenX

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

by formulahendryEarly↓ 66/wk★ 440Updated 14 months ago

Runs on your computer

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

by desktop-commanderGrowing★ 211Updated today

Runs in the cloud✓ desktopcommander.app

SWATGenX

SWAT+ watershed models for any river in the lower 48 states, with groundwater and PFAS data

by SWATGenXEarlyUpdated today

Runs in the cloud

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

A remote MCP server for Novacal. 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.


Connect

The hosted server is at https://mcp.novacal.io/mcp.

Claude Code

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" } } }

Claude Desktop and claude.ai

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.


Tools

ToolWhat it doesArguments
novacal_get_event_typesList event types on the accountscope (personal or team, optional)
novacal_get_event_typeFetch one event typeid
novacal_create_event_typeCreate an event typename, slug, type, duration, hidden_from_profile, color + 10 optional fields
novacal_get_availabilityFree slots for an event type in a date rangeevent_type_id, start, end, timezone (optional)
novacal_get_eventsList events on the accountnone
novacal_create_eventBook an eventevent_type_id, start, end, timezone, time_format, location and form_field_answers (optional)
novacal_cancel_eventCancel a future eventid, cancellation_reason (optional)
novacal_reschedule_eventMove a future eventid, start, end, timezone, time_format, user_role and form_field_answers (optional)

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

Event type scope

novacal_get_event_types takes an optional scope:

{ "scope": "personal" }

Use personal for your own event types and team for team event types. Leave it out to get both. The server tells the model to prefer personal unless you ask for a team event type.

Availability date ranges

start and end are plain YYYY-MM-DD dates. The range is start-inclusive and end-exclusive:

[start 00:00, end 00:00)

For a single day, pass the next day as end:

{

"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 for start and end is an empty range and returns nothing.

Timezones

timezone takes an IANA name such as Europe/Amsterdam, America/New_York, or Asia/Tokyo. It defaults to UTC when 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.


How auth works

  1. Your client starts an OAuth flow against the Worker.
  2. The Worker serves /authorize and asks for your Novacal API key.
  3. It verifies the key with GET /v1/users/me.
  4. 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.


Local development

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

npm install

npm run dev

EndpointURL
MCPhttp://127.0.0.1:8787/mcp
Sign-in pagehttp://127.0.0.1:8787/authorize
Health checkhttp://127.0.0.1:8787/health

npm run dev uses the dev Wrangler environment. It simulates KV and D1 locally and points at a Novacal API on http://localhost:8010, so it never touches production resources.

To poke at the tools by hand:

npx @modelcontextprotocol/inspector
Checks
npm run check    # tsc --noEmit

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

CI runs check, lint, and test on Node 20 for every push and pull request.


Deploy

Create the Cloudflare resources once:

npx wrangler kv namespace create OAUTH_KV

npx wrangler d1 create novacal-mcp-server-db

Copy the returned IDs into wrangler.toml under OAUTH_KV and DB, then apply the schema:

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

Deploy the production environment:

npm run deploy

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

Configuration
NameTypeValue
NOVACAL_API_BASE_URLvarhttps://api.novacal.io in production, http://localhost:8010 in dev
OAUTH_KVKV namespaceOAuth client, grant, and token storage
DBD1 databaselegacy, unused

How it is put together

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 a try/catch and returns an isError result 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.

Public routes
RoutePurpose
GET /server name and status
GET /healthhealth check
GET /.well-known/oauth-protected-resourceRFC 9728 metadata, with /mcp suffix variant
GET POST /authorizesign-in page and form post
POST /token, POST /registerhandled by OAuthProvider
POST /mcpthe MCP endpoint, requires a bearer token

Links

Ask PopNx