# 42min MCP MCP Server

> **42min MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to 42min MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/42min-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Remote MCP server for 42min online scheduling. Find open slots, book, reschedule and cancel meetings, manage availability, recurring meetings, meeting polls, routing forms and event types from Claude, ChatGPT, Cursor or any MCP client. Completely free.

---

## Details

- Server ID: `42min-mcp`
- Version: 0.1.0
- Tools: 43
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — 42min MCP has to be in the toolset
first. In order:

1. Add 42min MCP to your toolset at https://mewcp.com/mcp/42min-mcp
2. Connect your 42min MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (43)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `get_me` _(read)_ — The connected user's profile (name, username, timezone, locale) plus their organization and MCP role.
- `list_event_types` _(read)_ — List bookable meeting templates (event types), optionally filtered by active status, host user, or slug. Cursor-paginated.
- `get_event_type` _(read)_ — Full detail for one event type (duration, location, questions, limits) by UUID or "username/slug".
- `find_available_slots` _(read)_ — Open booking slots for an event type over a date range (max 31 days). Output is UTC ISO, capped at 200 slots.
- `check_slot` _(read)_ — Check whether one specific start time is bookable for an event type.
- `list_bookings` _(read)_ — List bookings with filters (status, date range, event type, attendee email, host). host_user_ids (array) supersedes host_user_id. series_id narrows to one…
- `get_booking` _(read)_ — One booking by uid, including labeled form responses (answers to since-deleted questions are omitted), routing form answers, location/conferencing URL, and…
- `list_meetings` _(read)_ — Host-side meetings view (upcoming/past/date range), with status, event type, and host filters (host_user_ids array supersedes host_user_id). Page-based.
- `search_contacts` _(read)_ — Search contacts by name/email, with meeting counts and tags. Page-based.
- `get_contact` _(read)_ — One contact plus their full meeting history (capped, most recent first).
- `get_schedules` _(read)_ — The connected user's own availability schedules (weekly intervals). Pass schedule_id for one schedule's date overrides. The no-argument form also returns the…
- `list_single_use_links` _(read)_ — List secret links (one-time booking links) with created/booked/expired status. Page-based.
- `list_roundtables` _(read)_ — List group scheduling polls (roundtables) with status, vote counts, and confirmed time. Newest first, capped at 50.
- `get_roundtable` _(read)_ — Full poll state for one roundtable: candidate slots, participants, per-slot vote tallies, and confirmed booking.
- `create_booking` _(write)_ — Book a meeting for an attendee at a start time on any active event type in the organization (public-page parity). Verify the slot with check_slot first. Pass…
- `cancel_booking` _(destructive)_ — Cancel a booking by uid. Notifies the attendee and removes the calendar event. Idempotent: canceling an already-canceled booking returns its current state and…
- `reschedule_booking` _(destructive)_ — Move a booking to a new start time. Verify the new slot with check_slot first; if this fails with slot_unavailable, call find_available_slots and offer…
- `set_event_type_status` _(destructive)_ — Turn a bookable event type on or off. Turning it off immediately stops new public bookings. Idempotent: setting it to the state it is already in returns the…
- `set_meeting_no_show` _(write)_ — Mark or unmark a past, confirmed meeting as a no-show. Idempotent: setting it to the state it is already in returns the current state with no change and no…
- `add_schedule_override` _(destructive)_ — Add or replace a date-specific override on one of the connected user's own availability schedules. Pass intervals: null to fully block the day, or an array of…
- `add_out_of_office` _(destructive)_ — Block a whole-day date range (inclusive) during which the connected user has no bookable slots anywhere — every schedule and event type, and round-robin skips…
- `delete_out_of_office` _(destructive)_ — Delete one of the connected user's out of office periods by id (ids come from get_schedules or add_out_of_office). The affected days become bookable again…
- `create_single_use_links` _(write)_ — Generate secret links (one-time booking links, quantity 1-10) for an event type you manage, returning shareable URLs. Each link can be used for exactly one…
- `delete_single_use_link` _(destructive)_ — Delete an unused secret link so it can no longer be used to book. Applies to links of event types you manage.
- `create_roundtable` _(write)_ — Create a DRAFT group scheduling poll (roundtable) on one of your event types, with 1-20 candidate time slots and — for access_mode "invitees" — up to 50 email…
- `publish_roundtable` _(destructive)_ — Publish a draft roundtable: opens voting, immediately emails every invited participant (invitees mode), and places tentative calendar holds on all candidate…
- `list_users` _(read)_ — List organization members (id, name, email, username, role, status, timezone). Use the returned user_id values in the host_user_id / host_user_ids filters of…
- `list_routing_forms` _(read)_ — List the lead-qualification routing forms you can access, newest first, with their public URL, status and question/rule/response counts. Use routing_form_id…
- `get_routing_form` _(read)_ — The full definition of one routing form: its questions (question_id is what list_routing_responses answer filters and evaluate_routing_form answers use) and…
- `list_routing_responses` _(read)_ — Lead-qualification submissions for one routing form: what each lead answered, which rule matched, where they were sent, and the booking they made if any. Rows…
- `get_routing_response` _(read)_ — The full record for one response — every stored answer entry (current questions, UUID keys whose question no longer exists or never did, and any other stored…
- `get_routing_form_stats` _(read)_ — One call for 'how is this form converting / where do leads land'. Use matched_rule_id / has_booking on list_routing_responses to drill in. by_rule is paged:…
- `evaluate_routing_form` _(read)_ — Answer with question_ids from get_routing_form (values as strings, numbers, booleans or null — numbers as numbers, e.g. 0, exactly as the public form sends…
- `set_routing_form_status` _(destructive)_ — Turn a routing form on or off. Turning it off makes the public form page unavailable (404) and stops new submissions immediately; forms that chain into it will…
- `duplicate_routing_form` _(write)_ — Copy a routing form, including its questions and rules — the copied rules keep working on the copy, and destinations are copied as is. The copy is created…
- `list_recurring` _(read)_ — Lists recurring meeting series (each is one attendee, one host, one repeating pattern). Narrowed to the hosts you can see: a user sees their own, a manager…
- `get_recurring` _(read)_ — One recurring series by uid, with its repeat pattern, host, attendee, status, and the next four occurrences. An occurrence marked moved was rescheduled on its…
- `create_recurring` _(write)_ — Create a recurring meeting series: one attendee, one host, one repeating pattern, booked as a run of ordinary meetings. The event type must allow recurring…
- `pause_recurring` _(write)_ — Pause a recurring series: every upcoming occurrence is canceled and held, and the attendee keeps the same number of meetings owed. resume_recurring reschedules…
- `resume_recurring` _(write)_ — Resume a paused series: one replacement meeting is booked for each held occurrence, on the pattern's next free dates, and an upcoming meeting off those dates…
- `end_recurring` _(destructive)_ — End a recurring series for good: every upcoming occurrence is canceled, the attendee is told once, and nothing is owed or rescheduled. Past meetings are…
- `update_recurring` _(write)_ — Change a recurring series: its repeat pattern, its fixed link, or whether the attendee is notified. A pattern change (frequency, interval_weeks, weekdays,…
- `change_recurring_host` _(write)_ — Move a recurring series and every upcoming occurrence to a different host. The new host must be one you may manage and must be able to host the event type. The…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file, then quit Claude Desktop completely and reopen it
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)