Koskamo

Conecto Calendar MCP

An official MCP server provided by Conecto for managing business booking pages, free times, and meetings. It allows AI agents to set up calendars, connect Google Calendar, create meeting types, find available times, and book, move, or cancel appointments, replacing tools like Calendly.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Conecto Calendar MCP logo, by ConectoVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Conecto
You need:someone on the account signs in on conecto.chat, ticks the areas it may use and allows it
MCP endpoint (Streamable HTTP)
https://api.conecto.chat/mcp/calendar
Vendor documentation

What its tools do

41 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

41 of 41 have a description · 41 of 41 declare behavior hints · 7 of 33 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to conecto.chat ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Set up business or personal booking pages with time zones and availability
  • Connect Google Calendar for synchronization
  • Book, move, or cancel meetings via AI agent actions
  • Create routing forms to direct visitors to appropriate hosts

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
conecto-calendar 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
41 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Conecto Calendar: The business's own Cal.com: meeting types, free times, booking pages, bookings moved or cancelled by anyone, Google/Microsoft sync, and calls that confirm meetings booked in advance. Every tool lists its price; reads are free up to 1,000,000 a month for the account (then $0.50 per 10,000), and a call that fails is never charged. Pay from your Conecto balance (GET https://api.conecto.chat/v1/balance).

Tools

41 advertised

calendar_setup — Set up the calendar
Advertised by the server during the last successful anonymous check.

Set the business's calendar, or a person's own (person: like a Cal.com user, with their own booking page, hours, time zone and Google calendar): its name on booking pages, address, time zone, weekly hours, date exceptions (holidays, special hours), and for the business's calendar reminder emails and confirmation calls. Only the fields you pass change. The first call creates the calendar; then add meeting types with calendar_save_meeting_type. Costs $0.001 per call; nothing if it fails.

calendar_setup input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "about": {
      "type": "string",
      "maxLength": 300,
      "description": "A line under the name on the booking page."
    },
    "hours": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "day",
          "start",
          "end"
        ],
        "properties": {
          "day": {
            "enum": [
              "monday",
              "tuesday",
              "wednesday",
              "thursday",
              "friday",
              "saturday",
              "sunday"
            ],
            "type": "string"
          },
          "end": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$"
          },
          "start": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 50,
      "description": "Weekly hours; several ranges a day are fine."
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account (admin_save_person), by email: sets up their own calendar and booking page instead of the business's."
    },
    "address": {
      "type": "string",
      "maxLength": 50,
      "minLength": 3,
      "description": "The booking page's address, like a Cal.com username: cncto.co/book/<address>. Lowercase letters, digits and hyphens, e.g. hansen-voss. The old address keeps working and forwards to the new one; no other business can take it."
    },
    "timezone": {
      "type": "string",
      "maxLength": 80,
      "description": "IANA time zone, e.g. Europe/Berlin."
    },
    "show_people": {
      "type": "boolean",
      "description": "The business's booking page links the pages of its people who have meeting types (default true)."
    },
    "reminder_hours": {
      "type": "array",
      "items": {
        "enum": [
          1,
          2,
          3,
          6,
          12,
          24,
          48,
          72
        ],
        "type": "integer"
      },
      "maxItems": 2,
      "description": "Email each attendee this many hours before (default [24]; up to two, e.g. [24, 1]); [] turns it off. $0.002 per reminder sent, paid accounts only. A booking made later than that gets none. For every meeting of the business, its people's too."
    },
    "date_exceptions": {
      "type": "object",
      "description": "{\"2026-12-24\": []} closes a day; {\"2026-12-31\": [{\"start\": \"09:00\", \"end\": \"13:00\"}]} sets its hours."
    },
    "connected_calendar_id": {
      "type": "string",
      "maxLength": 1024,
      "description": "After the owner (or the person) connected Google Calendar: which of their calendars to use (ids from calendar_get_setup)."
    },
    "confirmation_calls_hours": {
      "type": "integer",
      "maximum": 72,
      "minimum": 0,
      "description": "Call attendees this many hours before (2-72); 0 turns the calls off."
    }
  },
  "additionalProperties": false
}
calendar_setup annotations
{
  "title": "Set up the calendar",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_get_setup — Get the calendar setup
Advertised by the server during the last successful anonymous check.
Advertised read-only

The calendar's settings, booking page, iCal subscribe link, connected Google calendar (with the calendars to choose from) and confirmation calls; for the business's calendar also its meeting types and its people's calendars. person reads someone's own calendar. Free.

calendar_get_setup input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account, by email: their own calendar instead of the business's."
    }
  },
  "additionalProperties": false
}
calendar_get_setup annotations
{
  "title": "Get the calendar setup",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_connect — Connect Google Calendar
Advertised by the server during the last successful anonymous check.
Advertised read-only

A link to connect a Google calendar: the owner's for the business's calendar, or with person, that person's own. The page names the business, one click connects, and bookings then avoid busy times and appear in it (Google also emails the attendee an invitation). The link works once, for an hour. Then pick the calendar with calendar_setup connected_calendar_id. Outlook calendars: the microsoft365 tools work in them directly. A key that only reads or drafts gets the link as "[redacted]"; the owner and admins see it on their account page. Free.

calendar_connect input schema
{
  "type": "object",
  "required": [
    "provider"
  ],
  "properties": {
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account, by email: their own calendar instead of the business's."
    },
    "provider": {
      "enum": [
        "google"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
calendar_connect annotations
{
  "title": "Connect Google Calendar",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_save_meeting_type — Save a meeting type
Advertised by the server during the last successful anonymous check.

Create or change a kind of meeting people can book, like a Cal.com event type. It gets its own booking page. Only the fields you pass change. With person it is on that person's own calendar. A business type can be hosted by people like a Cal.com team event, once you choose how (there is no default): round_robin gives each booking to one host free then (the highest priority, then the fewest of this type that month for their weight, then whoever was booked longest ago; fixed hosts join every meeting), collective needs every host free and invites them all. Hosts use their own calendars' hours and Google calendars, unless the type sets hours of its own. Each host keeps their own page, which lists the business types they take; a round robin booked there goes to them. Location kinds: video (a link), phone (we call the attendee), call_us (they call a number), in_person (an address), custom. Costs $0.001 per call; nothing if it fails.

calendar_save_meeting_type input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{0,59}$",
      "description": "Its address on the booking page, e.g. \"intro-call\"."
    },
    "hosts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "person"
        ],
        "properties": {
          "fixed": {
            "type": "boolean",
            "description": "In every meeting (round robin)."
          },
          "person": {
            "type": "string",
            "maxLength": 254
          },
          "weight": {
            "type": "integer",
            "maximum": 1000,
            "minimum": 1,
            "description": "Round robin: 200 takes twice the share of 100 (default 100)."
          },
          "priority": {
            "enum": [
              "lowest",
              "low",
              "medium",
              "high",
              "highest"
            ],
            "type": "string",
            "description": "Round robin: higher goes first (default medium)."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 50,
      "description": "The people who take its bookings, replacing the list. Each is on the account; their calendar is made with their name if they have none."
    },
    "hours": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "day",
          "start",
          "end"
        ],
        "properties": {
          "day": {
            "enum": [
              "monday",
              "tuesday",
              "wednesday",
              "thursday",
              "friday",
              "saturday",
              "sunday"
            ],
            "type": "string"
          },
          "end": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$"
          },
          "start": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 50,
      "description": "Its own weekly hours; leave out to use the calendar's (for hosts, each one's own)."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "active": {
      "type": "boolean"
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Put it on this person's own calendar (their email) instead of the business's."
    },
    "location": {
      "type": "object",
      "properties": {
        "kind": {
          "enum": [
            "",
            "video",
            "google_meet",
            "phone",
            "call_us",
            "in_person",
            "custom"
          ],
          "type": "string"
        },
        "value": {
          "type": "string",
          "maxLength": 500
        }
      },
      "description": "Where it happens. google_meet gives each booking a Google Meet room of its own once the calendar that takes it is connected to Google (a video link on meet.google.com does the same); video is one fixed link, phone means you call them, call_us your number in value, in_person an address.",
      "additionalProperties": false
    },
    "ask_phone": {
      "enum": [
        "off",
        "optional",
        "required"
      ],
      "type": "string"
    },
    "questions": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "maxItems": 20,
      "description": "Extra questions on the booking form: {label, type: text|long_text|select|checkbox|number|email|phone, required, options}."
    },
    "assignment": {
      "enum": [
        "",
        "round_robin",
        "collective"
      ],
      "type": "string",
      "description": "How a business type's hosts take its bookings, required with hosts (no default): round_robin or collective; \"\" takes the hosts off, back to the business's own calendar."
    },
    "days_ahead": {
      "type": "integer",
      "maximum": 365,
      "minimum": 1
    },
    "description": {
      "type": "string",
      "maxLength": 2000
    },
    "max_per_day": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "The most of this type a day; for a hosted type, each host's most."
    },
    "buffer_after": {
      "type": "integer",
      "maximum": 240,
      "minimum": 0
    },
    "buffer_before": {
      "type": "integer",
      "maximum": 240,
      "minimum": 0
    },
    "slot_interval": {
      "type": "integer",
      "maximum": 480,
      "minimum": 5,
      "description": "Minutes between possible start times (default: the length)."
    },
    "length_minutes": {
      "type": "integer",
      "maximum": 480,
      "minimum": 5
    },
    "notice_minutes": {
      "type": "integer",
      "maximum": 43200,
      "minimum": 0,
      "description": "Minimum notice before a booking."
    },
    "offer_confirmation_call": {
      "type": "boolean",
      "description": "Offer \"call me the day before to confirm\" on the form."
    },
    "phone_assistant_books_this": {
      "type": "boolean",
      "description": "What the phone assistant books when a caller asks (a business type)."
    }
  },
  "additionalProperties": false
}
calendar_save_meeting_type annotations
{
  "title": "Save a meeting type",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_list_meeting_types — List meeting types
Advertised by the server during the last successful anonymous check.
Advertised read-only

The meeting types people can book, with their booking pages: the business's, then each person's own (meeting_type is how the other tools name each one). person lists only theirs. Free.

calendar_list_meeting_types input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account, by email: their own calendar instead of the business's."
    }
  },
  "additionalProperties": false
}
calendar_list_meeting_types annotations
{
  "title": "List meeting types",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_find_times — Find free times
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free start times for a meeting type between two dates (up to 62 days), shown in the time zone you ask for. For a round-robin type, host shows only that host's free times. Book one with calendar_book. Free.

calendar_find_times input schema
{
  "type": "object",
  "required": [
    "meeting_type"
  ],
  "properties": {
    "to": {
      "type": "string",
      "format": "date"
    },
    "from": {
      "type": "string",
      "format": "date"
    },
    "host": {
      "type": "string",
      "maxLength": 254,
      "description": "A round-robin type: only this host."
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "The meeting type is on this person's own calendar."
    },
    "timezone": {
      "type": "string",
      "maxLength": 80,
      "description": "Show times in this IANA zone (default: the calendar's)."
    },
    "meeting_type": {
      "type": "string",
      "description": "Its slug, or \"<person's address>/<slug>\" for a person's own type."
    }
  },
  "additionalProperties": false
}
calendar_find_times annotations
{
  "title": "Find free times",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_book — Book a meeting
Advertised by the server during the last successful anonymous check.

Book a free time (from calendar_find_times) for someone. They get a confirmation email with a calendar invite and a link to reschedule or cancel (if you give their email), and so do their guests (without the link). A round-robin type picks the host by its rules unless you name one. Set confirmation_call_agreed only if the person agreed to a call before the meeting asking whether they can still come. Costs $0.01 per call; nothing if it fails.

calendar_book input schema
{
  "type": "object",
  "required": [
    "meeting_type",
    "start",
    "name"
  ],
  "properties": {
    "host": {
      "type": "string",
      "maxLength": 254,
      "description": "A round-robin type: give it to this host (they must be free then)."
    },
    "name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "email": {
      "type": "string",
      "maxLength": 254
    },
    "phone": {
      "type": "string",
      "maxLength": 30
    },
    "start": {
      "type": "string",
      "format": "date-time"
    },
    "guests": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 254
      },
      "maxItems": 10,
      "description": "More people to invite, by email."
    },
    "notify": {
      "type": "boolean",
      "default": true,
      "description": "Email the attendee, the guests and the hosts (or the owner)."
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "The meeting type is on this person's own calendar."
    },
    "answers": {
      "type": "object",
      "description": "Answers to the meeting type's questions, by key."
    },
    "timezone": {
      "type": "string",
      "maxLength": 80,
      "description": "The attendee's IANA time zone."
    },
    "meeting_type": {
      "type": "string",
      "description": "Its slug, or \"<person's address>/<slug>\"."
    },
    "confirmation_call_agreed": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
calendar_book annotations
{
  "title": "Book a meeting",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
calendar_move — Move a meeting
Advertised by the server during the last successful anonymous check.

Move a booking to another free time. The attendee and the guests get an updated invite by email. A round-robin meeting keeps its host when they are free then, else goes to the host its rules pick. Costs $0.01 per call; nothing if it fails.

calendar_move input schema
{
  "type": "object",
  "required": [
    "booking",
    "start"
  ],
  "properties": {
    "start": {
      "type": "string",
      "format": "date-time"
    },
    "notify": {
      "type": "boolean",
      "default": true
    },
    "booking": {
      "type": "string",
      "description": "Its reference or booking_id."
    }
  },
  "additionalProperties": false
}
calendar_move annotations
{
  "title": "Move a meeting",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
calendar_cancel — Cancel a meeting
Advertised by the server during the last successful anonymous check.
Advertised destructive

Cancel a booking. The attendee, the guests and the hosts are told by email (unless notify is false). Costs $0.01 per call; nothing if it fails.

calendar_cancel input schema
{
  "type": "object",
  "required": [
    "booking"
  ],
  "properties": {
    "notify": {
      "type": "boolean",
      "default": true
    },
    "reason": {
      "type": "string",
      "maxLength": 300
    },
    "booking": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
calendar_cancel annotations
{
  "title": "Cancel a meeting",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
calendar_list_bookings — List bookings
Advertised by the server during the last successful anonymous check.
Advertised read-only

Bookings between two times (default: from now on), soonest first, with each one's hosts, guests and confirmation call. person lists the meetings that person has. Free.

calendar_list_bookings input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "to": {
      "type": "string",
      "format": "date-time"
    },
    "from": {
      "type": "string",
      "format": "date-time"
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account, by email: their own calendar instead of the business's."
    },
    "status": {
      "enum": [
        "scheduled",
        "cancelled",
        "any"
      ],
      "type": "string",
      "default": "scheduled"
    },
    "meeting_type": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
calendar_list_bookings annotations
{
  "title": "List bookings",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_save_routing_form — Save a routing form
Advertised by the server during the last successful anonymous check.

Create or change a routing form, like Cal.com's: questions a visitor answers before booking, and routes that send them to a meeting type (for a round-robin type, perhaps only some of its hosts), another site, or a message. The first route whose conditions all hold wins; everyone else takes the fallback. It lives at its calendar's address beside the meeting types: cncto.co/book/<calendar>/<slug>. A question keyed name (text) or email (email) fills in the booking form. Only the fields you pass change. Each answer set is kept (calendar_list_routing_responses) and the bot hears of it (calendar.routed). Costs $0.001 per call; nothing if it fails.

calendar_save_routing_form input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{0,59}$",
      "description": "Its address, e.g. \"get-started\"."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "active": {
      "type": "boolean"
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Put it on this person's own calendar."
    },
    "routes": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "maxItems": 30,
      "description": "[{\"when\": [{\"question\": \"<a question's key>\", \"<is|is_not|any_of|none_of|contains|at_least|below>\": <value>}, ...], \"to\": {\"meeting_type\": \"demo\", \"hosts\": [\"ana@example.com\"]} | {\"url\": \"https://...\"} | {\"message\": \"...\"}}], tried in order."
    },
    "fallback": {
      "type": "object",
      "description": "Where everyone else goes, as a route's \"to\"."
    },
    "questions": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "maxItems": 20,
      "description": "{key, label, type: text|long_text|select|checkbox|number|email|phone, required, options}."
    },
    "description": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "additionalProperties": false
}
calendar_save_routing_form annotations
{
  "title": "Save a routing form",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_list_routing_forms — List routing forms
Advertised by the server during the last successful anonymous check.
Advertised read-only

The routing forms, with their addresses, questions, routes and how many people answered each. Free.

calendar_list_routing_forms input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
calendar_list_routing_forms annotations
{
  "title": "List routing forms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calendar_list_routing_responses — List routing form answers
Advertised by the server during the last successful anonymous check.
Advertised read-only

What people answered on the routing forms, newest first: their answers, where each was sent, and the booking it led to. Free.

calendar_list_routing_responses input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "form": {
      "type": "string",
      "description": "A routing form's slug."
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1
    },
    "person": {
      "type": "string",
      "maxLength": 254,
      "description": "Someone on the account, by email: their own calendar instead of the business's."
    }
  },
  "additionalProperties": false
}
calendar_list_routing_responses annotations
{
  "title": "List routing form answers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_balance — Check balance
Advertised by the server during the last successful anonymous check.
Advertised read-only

The account balance, how much of it is credit bought (AI visibility and the phone run only on that) and how much free and bonus credit, what running calls are holding, this key's daily budget, the auto-reload state, and how much of this month's free reads and downloads is used. Free.

account_balance input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_balance annotations
{
  "title": "Check balance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_get_call — Get a call
Advertised by the server during the last successful anonymous check.
Advertised read-only

One call by id: its status (queued, running, succeeded, failed), cost and result. Use it to poll a background call until it finishes. Free.

account_get_call input schema
{
  "type": "object",
  "required": [
    "call_id"
  ],
  "properties": {
    "call_id": {
      "type": "string",
      "maxLength": 36,
      "minLength": 36
    }
  },
  "additionalProperties": false
}
account_get_call annotations
{
  "title": "Get a call",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_list_calls — List calls
Advertised by the server during the last successful anonymous check.
Advertised read-only

Recent calls on this account, newest first, optionally only failed or succeeded ones, or one area's. Free.

account_list_calls input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "area": {
      "enum": [
        "analytics",
        "code",
        "crm",
        "calendar",
        "chat",
        "account",
        "admin",
        "email",
        "helpdesk",
        "documents",
        "esign",
        "hiring",
        "outreach",
        "prospects",
        "lookups",
        "companies",
        "longlists",
        "mergers",
        "valuation",
        "newsletters",
        "notify",
        "projects",
        "schedules",
        "speech",
        "uptime",
        "vault",
        "web",
        "tables",
        "links",
        "images",
        "files",
        "forms",
        "helpcenter",
        "imports",
        "invoices",
        "books",
        "inventory",
        "whistleblowing",
        "connect",
        "microsoft365",
        "googleworkspace",
        "hubspot",
        "salesforce",
        "directory",
        "hr",
        "social",
        "purchasing",
        "phone",
        "websites",
        "views",
        "visibility",
        "markets"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1
    },
    "status": {
      "enum": [
        "reserved",
        "running",
        "succeeded",
        "failed"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
account_list_calls annotations
{
  "title": "List calls",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_refund_topup — Refund a top-up
Advertised by the server during the last successful anonymous check.
Advertised destructive

Refund a top-up paid in the last 24 hours that none of has been used yet: its credit, with the first top-up's bonus, leaves the balance, and the card gets the credit back with its tax. The service fee is kept. Without topup_id, the newest top-up (GET /v1/topups lists them with their ids). Free. Free.

account_refund_topup input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "topup_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false
}
account_refund_topup annotations
{
  "title": "Refund a top-up",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
account_set_owner_email — Name the business's owner
Advertised by the server during the last successful anonymous check.

When the account was made without the owner's email: send that person a link to confirm they own it. Once they confirm, the owner gets the account's warnings and approval requests, and only the owner raises limits. Nothing changes until they open the link. Free. Free.

account_set_owner_email input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254,
      "minLength": 3
    }
  },
  "additionalProperties": false
}
account_set_owner_email annotations
{
  "title": "Name the business's owner",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_owner_link — Get a sign-in link for the owner
Advertised by the server during the last successful anonymous check.
Advertised read-only

A link that signs the business owner into their Conecto page, with no password: the balance, adding credit, auto-reload, limits, what the bots did, people, rentals and keys. page opens it where the owner is needed, like people for a role only the owner gives, or settings for joining by email domain. It works once, within 30 minutes; hand it to the owner. Free.

account_owner_link input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "page": {
      "enum": [
        "home",
        "tools",
        "activity",
        "apps",
        "billing",
        "add_credit",
        "limits",
        "people",
        "settings"
      ],
      "type": "string",
      "default": "home"
    }
  },
  "additionalProperties": false
}
account_owner_link annotations
{
  "title": "Get a sign-in link for the owner",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_dashboard_link — Get a link to an area at a glance
Advertised by the server during the last successful anonymous check.
Advertised read-only

A one-time link to a page showing one area as it is when the page opens, for when the person you work for asks to see it themselves: a recruiter looks at the applicants, a bookkeeper at what is due. Do the work and answer with the area's own tools first; a link never replaces that. When an answer would be a long list they would rather look through, offer a link and make it once they say yes. The page is made from the area's own reads as this key, so it shows only what this key may see. It opens once and keeps for an hour; an unopened link ends after 7 days. Free.

account_dashboard_link input schema
{
  "type": "object",
  "required": [
    "area"
  ],
  "properties": {
    "area": {
      "enum": [
        "analytics",
        "code",
        "crm",
        "calendar",
        "chat",
        "account",
        "admin",
        "email",
        "helpdesk",
        "documents",
        "esign",
        "hiring",
        "outreach",
        "prospects",
        "lookups",
        "companies",
        "longlists",
        "mergers",
        "valuation",
        "newsletters",
        "notify",
        "projects",
        "schedules",
        "speech",
        "uptime",
        "vault",
        "web",
        "tables",
        "links",
        "images",
        "files",
        "forms",
        "helpcenter",
        "imports",
        "invoices",
        "books",
        "inventory",
        "whistleblowing",
        "connect",
        "microsoft365",
        "googleworkspace",
        "hubspot",
        "salesforce",
        "directory",
        "hr",
        "social",
        "purchasing",
        "phone",
        "websites",
        "views",
        "visibility",
        "markets"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
account_dashboard_link annotations
{
  "title": "Get a link to an area at a glance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_get_limits — Read the limits
Advertised by the server during the last successful anonymous check.
Advertised read-only

The limits a business can ask Conecto to raise (calls a minute, new email addresses a day, phone numbers and more): each one's standard and current value and the most that can be asked for, and the business's requests with their answers. Free.

account_get_limits input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_get_limits annotations
{
  "title": "Read the limits",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_request_limit — Ask for a higher limit
Advertised by the server during the last successful anonymous check.

Ask Conecto to raise one of the business's limits: which one (or other, saying which), the number it needs, and why, in 40 to 2,000 characters. Conecto reviews it and approves (maybe with less) or declines; the answer comes as the account.limit_request_answered event and by email to the owner, who is also told now. For an account that has topped up; one request per limit at a time, five in 30 days. Free. Free.

account_request_limit input schema
{
  "type": "object",
  "required": [
    "limit",
    "amount",
    "reason"
  ],
  "properties": {
    "limit": {
      "enum": [
        "calls_per_minute",
        "key_calls_per_minute",
        "downloads_per_hour",
        "new_email_recipients_per_day",
        "documents_emailed_per_day",
        "orders_emailed_per_day",
        "phone_numbers",
        "confirmation_calls_per_day",
        "connections",
        "storage_blocks",
        "prospects_per_month",
        "outreach_mailboxes",
        "other"
      ],
      "type": "string",
      "description": "The limit, as account_get_limits names it, or other."
    },
    "other": {
      "type": "string",
      "maxLength": 200,
      "description": "With limit other: which limit, like \"rows in one table\"."
    },
    "amount": {
      "type": "integer",
      "maximum": 1000000000,
      "minimum": 1,
      "description": "The number the business needs, in the limit's unit (5000 calls a minute)."
    },
    "reason": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 40,
      "description": "What the business does that needs it, and why the current limit is too low."
    }
  },
  "additionalProperties": false
}
account_request_limit annotations
{
  "title": "Ask for a higher limit",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_events — Read recent events
Advertised by the server during the last successful anonymous check.
Advertised read-only

What happened in this account that someone outside the bot did, oldest first: applications, bookings, form responses, signatures, replies, emails received, goals reached on the website; and the custom events bots sent with account_emit_event. Kept 30 days. Poll with after = the last event_id you saw. Free.

account_events input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "after": {
      "type": "integer",
      "minimum": 0,
      "description": "Only events after this event_id."
    },
    "kinds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 30,
      "description": "Event names or areas (\"hiring.*\"); all when left out."
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
account_events annotations
{
  "title": "Read recent events",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_emit_event — Send an event of your own
Advertised by the server during the last successful anonymous check.

Send an event you name, custom.<name> (custom.lead_qualified, custom.order_shipped), to every channel subscribed to it (notify_subscribe with "custom.*" or its name: Slack, Teams, a webhook to Zapier, Make, n8n or the business's own systems) and to account_events, where another team's bot can pick it up. data is any JSON object (up to 10 KB); sent_by is added with this bot's name and team. $0.005 for each channel it goes to; free when no channel is subscribed. Costs $0.005 per channel it goes to; nothing if none are found.

account_emit_event input schema
{
  "type": "object",
  "required": [
    "kind",
    "title"
  ],
  "properties": {
    "data": {
      "type": "object"
    },
    "kind": {
      "type": "string",
      "pattern": "^custom\\.[a-z0-9][a-z0-9_.-]*$",
      "maxLength": 66,
      "minLength": 8,
      "description": "custom. and a name of lowercase letters, digits, dots, dashes and _."
    },
    "link": {
      "type": "string",
      "pattern": "^https://",
      "maxLength": 1000
    },
    "text": {
      "type": "string",
      "maxLength": 4000
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
account_emit_event annotations
{
  "title": "Send an event of your own",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_search — Search everything
Advertised by the server during the last successful anonymous check.
Advertised read-only

One search over what this account holds: what its files say (PDFs, Word, Excel, PowerPoint, text), table rows, help center articles, CRM contacts, companies and deals, emails, tickets, quotes and invoices, book entries, stock items and project tasks. Every word must appear (any case); titles rank first, then the newest. Each result says which tool opens it. Narrow it with areas. Free.

account_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "areas": {
      "type": "array",
      "items": {
        "enum": [
          "files",
          "tables",
          "helpcenter",
          "crm",
          "email",
          "helpdesk",
          "invoices",
          "books",
          "inventory",
          "projects"
        ],
        "type": "string"
      },
      "minItems": 1
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
account_search annotations
{
  "title": "Search everything",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_get_brand — See the business's look
Advertised by the server during the last successful anonymous check.
Advertised read-only

The name, logo, colour and footer line the business's emails and published pages carry. Free.

account_get_brand input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_get_brand annotations
{
  "title": "See the business's look",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_set_brand — Set the business's look
Advertised by the server during the last successful anonymous check.

The business's name as the sender, its logo (a PNG, JPEG, WebP or GIF from the file store), its colour and a footer line (an address, a legal line), on every email to its customers (bookings, applications, tests, signatures, invoices, newsletters, replies) and on its published pages (forms, booking, careers, newsletters, status, views). Only what you pass changes; an empty string clears it. Mail from Conecto to you keeps Conecto's look. Costs $0.001 per call; nothing if it fails.

account_set_brand input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "colour": {
      "type": "string",
      "maxLength": 7,
      "description": "Hex, like #1a73e8; empty for none."
    },
    "footer": {
      "type": "string",
      "maxLength": 200
    },
    "remove_logo": {
      "type": "boolean",
      "default": false
    },
    "sender_name": {
      "type": "string",
      "maxLength": 120
    },
    "logo_file_id": {
      "type": "string",
      "maxLength": 36,
      "minLength": 36
    }
  },
  "additionalProperties": false
}
account_set_brand annotations
{
  "title": "Set the business's look",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_list_email_templates — See what the business's emails say
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every email Conecto sends to the business's customers (bookings, applications, interviews, tests, signatures, invoices and quotes, newsletter sign-ups), with when it goes out and its subject, headline and opening words as they are now, and the {variables} each can use. Free.

account_list_email_templates input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_list_email_templates annotations
{
  "title": "See what the business's emails say",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_set_email_template — Rewrite one of the business's emails
Advertised by the server during the last successful anonymous check.

Change an email's subject, headline or opening words in the business's own voice, with {variables} from account_list_email_templates (like {name} or {when}). The facts under them (times, places, amounts, links and buttons) stay as they are. Only what you pass changes; an empty string brings back the original words. Plain text; a blank line starts a new paragraph. Costs $0.001 per call; nothing if it fails.

account_set_email_template input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 40,
      "description": "Like booking_booked or invoice_sent."
    },
    "opening": {
      "type": "string",
      "maxLength": 4000
    },
    "subject": {
      "type": "string",
      "maxLength": 200
    },
    "headline": {
      "type": "string",
      "maxLength": 120
    }
  },
  "additionalProperties": false
}
account_set_email_template annotations
{
  "title": "Rewrite one of the business's emails",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_export_all — Export everything
Advertised by the server during the last successful anonymous check.

Everything this account holds, in ZIP files of up to 24 MB saved to its file store: every record of every area as JSON Lines, and the stored files themselves, with a README saying what is where. Credentials are left out. Runs in the background: poll the call with account_get_call; the result has a download link for each part. The parts open only for this key and for the owner's and admins' own keys that neither only read nor only draft. A key of a team other than the company-wide one gets owner_required. Free (EU Data Act). One at a time, three a day; the owner is emailed when an export is made. Free. Runs in the background: the reply has a call_id; poll it with the account_get_call tool or GET /v1/calls/<id>.

account_export_all input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_export_all annotations
{
  "title": "Export everything",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_audit_log — Read the audit log
Advertised by the server during the last successful anonymous check.
Advertised read-only

The account's admin and security actions, newest first: keys made and revoked, limits and auto-reload, the owner's sign-ins, connectors, exports, vault reads and writes, credentials set and everything deleted. Ordinary work is in the call log (account_list_calls). verify: true also checks the hash chain, which breaks where an entry was changed or removed. Free.

account_audit_log input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 500,
      "minimum": 1
    },
    "since": {
      "type": "string",
      "format": "date-time",
      "maxLength": 40
    },
    "action": {
      "type": "string",
      "maxLength": 60,
      "description": "Only actions starting with this, like \"key.\" or \"tool.vault_\"."
    },
    "verify": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
account_audit_log annotations
{
  "title": "Read the audit log",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_save_team — Create or change a team
Advertised by the server during the last successful anonymous check.

A department, location or project group of the account, like Support, Finance or the Hamburg shop. Its keys (POST /v1/keys with "team") can only work in its areas, only read when read_only is on, and spend against its budget (monthly_budget_usd per budget_period: a month, a fiscal quarter or year, or a project total): a hard budget refuses the call that would pass it, a soft one only warns. At alert_percent you get the event account.budget_alert and the owner an email, once a period. erp_code is the team's cost center in the company's ERP, for statements. drafts_only makes every write of its keys wait for one of its managers (or the owner), for a new bot that should only draft. mailboxes are the Microsoft 365 or Google mailboxes its keys may act as. You may make a team and narrow one; widening its areas, letting it write, ending drafts only, switching a hard budget to soft, and raising or removing a budget are the owner's, on their account page, when the account has an owner email. The company-wide team holds every key no other team does and is never limited to areas. $0.001. Costs $0.001 per call; nothing if it fails.

account_save_team input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1
    },
    "areas": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "description": "The areas its keys may work in (account tools always); null for every area."
    },
    "budget": {
      "enum": [
        "hard",
        "soft"
      ],
      "type": "string",
      "description": "hard refuses calls past the budget; soft only warns."
    },
    "erp_code": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 40
    },
    "new_name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "Renames the team; its keys, spend and budget stay with it."
    },
    "mailboxes": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "string",
        "maxLength": 254
      },
      "maxItems": 20,
      "description": "The Microsoft 365 or Google mailboxes its keys may act as; null for every mailbox the connection lists."
    },
    "read_only": {
      "type": "boolean",
      "description": "Its keys only read, and get links that act for whoever opens them as \"[redacted]\"."
    },
    "drafts_only": {
      "type": "boolean",
      "description": "Every write of its keys waits for a person, and they get links that act for whoever opens them as \"[redacted]\"."
    },
    "alert_percent": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "budget_period": {
      "enum": [
        "month",
        "quarter",
        "year",
        "project"
      ],
      "type": "string",
      "description": "What the budget is for: a month, a quarter or a year of the account's fiscal calendar, or a project total until budget_ends_on."
    },
    "budget_ends_on": {
      "type": [
        "string",
        "null"
      ],
      "format": "date",
      "description": "The last day of a project budget, like 2026-12-31."
    },
    "sees_sensitive": {
      "type": "boolean",
      "description": "false hides suppliers' bank details and HR notes and contracts from its keys; only the owner turns it on."
    },
    "monthly_budget_usd": {
      "type": [
        "number",
        "null"
      ],
      "maximum": 1000000,
      "minimum": 0,
      "description": "null counts the spend without a cap."
    }
  },
  "additionalProperties": false
}
account_save_team annotations
{
  "title": "Create or change a team",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_list_teams — List teams
Advertised by the server during the last successful anonymous check.
Advertised read-only

The account's teams, the company-wide one first: each with its areas, whether it only reads, its budget (hard or soft, and its period) and alert line, this period's spend, its ERP code, whether it is paused, its keys, and its people with who manages it. A person's own assistant works within their teams. Free.

account_list_teams input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_list_teams annotations
{
  "title": "List teams",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_pause_team — Pause a team
Advertised by the server during the last successful anonymous check.

Stops every key of a team at once, this one too if it is the team's: their calls are refused until the owner starts the team again on their account page. For a bot that misbehaves or a team that spends too fast. Free. Free.

account_pause_team input schema
{
  "type": "object",
  "required": [
    "team"
  ],
  "properties": {
    "team": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
account_pause_team annotations
{
  "title": "Pause a team",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_assign_team — Give something to a team
Advertised by the server during the last successful anonymous check.

Move a form, a meeting type, a job, an inbox, a phone number, a newsletter, the website chat, a rental, a pipeline, a table or a website to a team. What happens through it is charged to that team from now on (a form's responses, a number's calls, an inbox's tickets), and its rental moves with it. Something a bot makes already belongs to the bot's team. Only a key of the company-wide team without limits moves things between teams. $0.001. Costs $0.001 per call; nothing if it fails.

account_assign_team input schema
{
  "type": "object",
  "required": [
    "kind",
    "team"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 254,
      "description": "Its id, slug, name, address or number; not needed for the chat."
    },
    "kind": {
      "enum": [
        "form",
        "meeting_type",
        "job",
        "inbox",
        "phone_number",
        "newsletter",
        "chat",
        "rental",
        "pipeline",
        "table",
        "website"
      ],
      "type": "string"
    },
    "team": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
account_assign_team annotations
{
  "title": "Give something to a team",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_add_approval_rule — Hold a tool for approval
Advertised by the server during the last successful anonymous check.

Make a tool wait for a person: every call of it, those whose argument is over a number (like invoices_create_credit_note when amount is over 500), or those whose argument is one of some values (like connect_call when method is POST, PUT, PATCH or DELETE). A held call answers approval_required with an approval_id and asks the approver; when they approve, call again with the same arguments, once (a call no person answers for adds the approval: header X-Conecto-Approval, or _meta.approvalId over MCP). The approver is an email, a saved channel, or a team (its managers, or everyone in it); each approver gets a link of their own, and the person whose call it is never approves it. With two_people_over, calls whose argument is over it need two people. Bills like Xero's bill approval: purchasing_create_bill with argument total holds bills over an amount, tax included; a rule on purchasing_pay_bill also holds batches with such a payment. Removing a rule is the owner's, on their account page, when the account has an owner email. $0.001. Costs $0.001 per call; nothing if it fails.

account_add_approval_rule input schema
{
  "type": "object",
  "required": [
    "tool"
  ],
  "properties": {
    "over": {
      "type": "number",
      "description": "Calls with argument over this are held."
    },
    "tool": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1
    },
    "values": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60,
        "minLength": 1
      },
      "maxItems": 20,
      "minItems": 1,
      "description": "Calls with argument equal to one of these (any case) are held."
    },
    "argument": {
      "type": "string",
      "maxLength": 60,
      "description": "An argument of the tool (or total, for purchasing_create_bill)."
    },
    "approvers": {
      "enum": [
        "managers",
        "everyone"
      ],
      "type": "string",
      "default": "managers",
      "description": "Who in approver_team approves."
    },
    "approver_team": {
      "type": "string",
      "maxLength": 80,
      "description": "A team (account_list_teams)."
    },
    "approver_email": {
      "type": "string",
      "maxLength": 254
    },
    "two_people_over": {
      "type": "number",
      "description": "Calls whose argument is over this need two people; higher than over."
    },
    "approver_channel": {
      "type": "string",
      "maxLength": 80,
      "description": "A saved notify channel."
    }
  },
  "additionalProperties": false
}
account_add_approval_rule annotations
{
  "title": "Hold a tool for approval",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_list_approval_rules — List approval rules
Advertised by the server during the last successful anonymous check.
Advertised read-only

The tools that wait for a person's approval, with their thresholds and approvers. Free.

account_list_approval_rules input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
account_list_approval_rules annotations
{
  "title": "List approval rules",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_find_person — Find a person's data
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every record this account holds about one person, by their email address or phone number, across every area: CRM, chats, emails, tickets, forms, bookings, calls, applications, invoices, orders, newsletters, HR and the call log, with their chats and CRM history. For a person who asks what the business keeps about them (GDPR Art. 15). Shows each kind with its count and ids; account_export_person gives them a copy, account_erase_person erases what may go. Free.

account_find_person input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254,
      "description": "The person's email address."
    },
    "phone": {
      "type": "string",
      "maxLength": 40,
      "description": "Their phone number in international format, like +1 503 555 0145."
    }
  },
  "additionalProperties": false
}
account_find_person annotations
{
  "title": "Find a person's data",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
account_export_person — Export a person's data
Advertised by the server during the last successful anonymous check.

Everything account_find_person finds about one person in one ZIP in the file store: their records as JSON Lines (credentials left out) and the files those records point to, like a CV. Give the person the download link when they ask for a copy of their data (GDPR Art. 15 and 20), once you know it is them. The ZIP opens only for this key and for the owner's and admins' own keys that neither only read nor only draft. A key of a team other than the company-wide one gets owner_required: pass the request to the owner. Free; 20 a day. Free.

account_export_person input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254,
      "description": "The person's email address."
    },
    "phone": {
      "type": "string",
      "maxLength": 40,
      "description": "Their phone number in international format, like +1 503 555 0145."
    }
  },
  "additionalProperties": false
}
account_export_person annotations
{
  "title": "Export a person's data",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
account_erase_person — Erase a person's data
Advertised by the server during the last successful anonymous check.
Advertised destructive

Erases one person across every area when they ask (GDPR Art. 17), once you know it is them (they wrote from that address, or confirmed it). Their CRM contact, chat visitor, past meetings and calls are anonymised, so deals stay without them, and a meeting they were only a guest at drops them; their chats, CRM history, form and routing form answers, job applications with the CV, newsletter subscriptions and events are deleted, and the call log's contents that name them are cleared. Kept, each with its reason in the result: accounting records, employment records, signed documents, the audit log, the account's own settings, upcoming meetings, and emails and tickets (outreach emails and replies too) unless correspondence is true. Their address goes on the suppression lists, so it is never mailed again: outreach campaigns stop for them at once. Can't be undone; the owner is emailed. A key of a team other than the company-wide one gets owner_required: pass the request to the owner. Free. Free.

account_erase_person input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 254,
      "description": "The person's email address."
    },
    "phone": {
      "type": "string",
      "maxLength": 40,
      "description": "Their phone number in international format, like +1 503 555 0145."
    },
    "correspondence": {
      "type": "boolean",
      "default": false,
      "description": "Also delete their emails and tickets, when no law requires keeping them."
    }
  },
  "additionalProperties": false
}
account_erase_person annotations
{
  "title": "Erase a person's data",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
account_data_locations — See where the data is
Advertised by the server during the last successful anonymous check.
Advertised read-only

Where each area's data is stored and processed: the company that runs each place, the country or region, and what it holds. Every area keeps its records in the database and runs on Conecto's servers; some also use a service named here (email, phone, PDFs, search). For the business's records of processing and its transfer assessments (GDPR Art. 30 and 44). Free.

account_data_locations input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "areas": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      },
      "maxItems": 50,
      "description": "Areas to show, like [\"email\", \"phone\"]; all when left out."
    }
  },
  "additionalProperties": false
}
account_data_locations annotations
{
  "title": "See where the data is",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
852 ms
95th percentile latency
852 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 852 ms · metadata changed · 41 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http conecto-calendar-mcp https://api.conecto.chat/mcp/calendar

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add conecto-calendar-mcp --url https://api.conecto.chat/mcp/calendar

Cursor

Merge this server into .cursor/mcp.json in your project, then enable conecto-calendar-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "conecto-calendar-mcp": {
      "url": "https://api.conecto.chat/mcp/calendar"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "conecto-calendar-mcp": {
      "type": "streamableHttp",
      "url": "https://api.conecto.chat/mcp/calendar",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start conecto-calendar-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "conecto-calendar-mcp": {
      "type": "http",
      "url": "https://api.conecto.chat/mcp/calendar"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http conecto-calendar-mcp https://api.conecto.chat/mcp/calendar

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.conecto.chat/mcp/calendar

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "conecto-calendar-mcp": {
      "serverUrl": "https://api.conecto.chat/mcp/calendar"
    }
  }
}

Let your agent find its tools

Find servers like Conecto Calendar MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Conecto Calendar MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing