MCP

Connect Spotka to your AI app

Spotka speaks MCP.

Add one line to Claude, Cursor, or any app that speaks MCP, and it can find things to do, make events, and answer invitations for you, in your name, with your own account.

The endpoint

https://spotka.co/api/v1/mcp

It speaks MCP over plain HTTP: one POST per message, which is what Claude, Cursor and Windsurf send. Your key travels in an X-API-Key header.

There is nothing to install and no server to run. Two protocol versions are supported, 2025-06-18 and 2025-03-26; your app picks one on its own.

First, get your key

Open Spotka on the web, Android or iPhone and go to Settings → API access → Create a key, or jump straight there:

Open Spotka settings

You get a short key like spk_4KAS22M1JQFQ. It is shown once. If you lose it, make a new one. It takes one tap, and you can revoke the old one on the same screen.

A key belongs to one person: yours. Whatever you connect can do only what you can do in the app yourself.

Add it to your app

Claude Code

claude mcp add --transport http spotka https://spotka.co/api/v1/mcp \
  --header "X-API-Key: spk_XXXXXXXXXXXX"

Claude Desktop, Cursor, Windsurf and most others

These keep a small config file listing the MCP servers they use. Add Spotka to it:

{
  "mcpServers": {
    "spotka": {
      "type": "http",
      "url": "https://spotka.co/api/v1/mcp",
      "headers": { "X-API-Key": "spk_XXXXXXXXXXXX" }
    }
  }
}

Then restart the app. Spotka's tools show up in its tool list.

An app that only lets you paste a URL

Some apps have nowhere to put a header. Put the key in the URL instead. It works exactly the same:

https://spotka.co/api/v1/mcp?key=spk_XXXXXXXXXXXX

Treat that URL like a password, because it now contains one.

Check it worked: open https://spotka.co/api/v1/mcp in a browser. It answers with the server name and the list of tools, no key needed.

What your app can then do

ToolWhat it does
ideasThings to do in the city, picked for you
eventsEvents other members are hosting that suit you
my_eventsEvents you host, events you joined, invitations waiting for you
create_eventAdd an event
update_eventChange an event you host: partial, so anything you leave out stays as it is. Pass publish=true to publish a draft
inviteInvite people to an event, or make the event and invite in one go
eventOne event in full: lifecycle, held seats vs calendared guests, guest states, seats remaining, allowed actions
joinTake a seat at someone else's event
leaveGive up a seat you took
respondAccept or decline an invitation, or, as the host, approve a guest's pending time proposal (not interest alone)
archiveRetire an event you host
delete_eventDelete an unpublished draft
inboxWhat is waiting: unread conversations and invitations
conversationOne conversation, without marking it read
mark_readMark a conversation read, on purpose
send_messageSend a message as you. Needs a key with messaging enabled
activity_historyWhat this API changed on your account
revoke_inviteTake back an invitation you sent
calendarWhat you have coming up, hosted and joined
profileYour own profile: public half and private context
update_profileChange your own profile; only the fields you name
notification_settingsWhich notifications you get by push and by email, and whether any device is registered to deliver them
update_notification_settingsTurn notifications on or off, on one rail or both; only the ones you name change
report_bugTell the Spotka team something is broken. Default is no auto-fix. Send autofix=true on a clear bug to send it to a coder. Duplicates fold onto the open report they match; send check_only=true to get that verdict without filing. Pass product_url, app_version, platform, and a screenshot when you have them. Poll report_status; when waiting for a re-test, call verify_bug
report_featureAsk for something Spotka does not do yet: same queue, same rule
report_statusPoll a report this account filed. Omit report to list recent ones. A fleet agent may pass waiting=true to list every report waiting for a re-test
verify_bugSubmit the retest verdict without the email token. verdict=works, still_broken or unverified. A fleet agent may also verify any waiting report
capabilitiesWhat your key may do, what each tool changes in the world, and how much budget is left

If this key belongs to a test account, report_bug and report_feature file as soon as you observe a problem. Do not wait for a person to confirm. Those reports show up in the review queue tagged as a test filing. Default is no auto-fix. Send autofix=true on a clear bug to send it to a coder. Poll report_status; when waiting for a re-test, call verify_bug. Do not wait on email.

Times and places are ordinary words, or an ISO instant. Your app should say next Friday at 7pm or 2026-08-22T18:00:00+02:00. If the time cannot be read, or publishing cannot complete, the tool fails and names the unmet fields rather than leaving a silent draft.

A few more tools exist for writing test suites and work only with a test key: actors, seed, reset, key_list, key_create and key_revoke. They are described in the full API guide.

Try it

Once it is connected, just ask in ordinary words:

  • "What's on in Warsaw this weekend?"
  • "Any Spotka events I could join on Saturday?"
  • "Make an event: board games, Sunday at 6pm, Kawiarnia Relaks."
  • "Do I have any invitations waiting?"
  • "Something broke while I was testing. File a bug report."

If you would rather not use MCP at all, the same things work with one curl line. See the full API guide.

Good to know

Invitations send real email

They go out in your name, so it is worth telling your assistant to check with you before it invites anyone.

Reporting a problem while testing

If you are signed in as a test or bot account, file with report_bug or report_feature as soon as something is wrong. Do not wait for a person to confirm. The report is tagged as a test filing. Default is no auto-fix. Send autofix=true on a clear bug to send it to a coder. Feature requests still wait for a person.

A bot cannot click the verification email. Poll report_status, re-test on production when waiting_for_retest is true, then call verify_bug with verdict=works or still_broken. If you could not run the re-test at all, send verdict=unverified, which leaves the report waiting instead of marking a fix wrong. A QA fleet agent may also pass waiting=true on report_status to pick up reports another person filed, then verify those after a real check. Do not wait for the original reporter. Do not read the mailbox.

Limits and speed

Same key, same limits as the rest of the API: a per-minute and per-day call budget, a tighter one for events and invites, and a daily cap on people invited. What you have left is in the X-RateLimit-Remaining header of every reply, and X-RateLimit-Bucket names which budget it is counting: always the one closest to running out, usually the per-minute one.

The numbers, and how long each call takes, are on the full API guide, kept in one place on purpose, so the two pages cannot quietly disagree about them. If you need more, write to support@spotka.co.

If your app cannot connect

  • The endpoint answers POST. There is no server-to-client stream, so a client that insists on one is told so plainly rather than left hanging.
  • A key that is missing or wrong shows up on the first real call, not at connect time. The tool list is public on purpose.
  • Still stuck? Write to support@spotka.co.