Talk to HapMap.
HapMap speaks Model Context Protocol. Point Claude — or any MCP client — at it, and an AI can find happenings near you, search real places, and host something new. With your key. As you. Never as if it were there.
Endpoints
| Environment | Endpoint | Use it for |
|---|---|---|
| Production | https://mcp.hapmap.no/mcp |
The stable name. Put this in your config and forget it. |
| Development | https://staging-mcp.hapmap.no/mcp |
Tracks the staging environment — for testing integrations against what ships next. |
Both speak MCP over Streamable HTTP: POST with your token as a bearer.
There are no sessions to manage — every request stands alone.
GET /health answers without auth if you just want a pulse.
While HapMap is launching, both names serve the same environment — the one the app
uses. When a separate production environment arrives, mcp.hapmap.no
moves with it and your saved config keeps working.
Get a token
An AI talks to HapMap with a personal access token — a key you mint, scope, and revoke.
- In the app, open Settings → API access.
- Name the token for what will hold it — “Claude” beats “token 2” when you're deciding what to revoke.
- Pick scopes: read sees what you could see, write does what you could do. An optional expiry ends it on a date; otherwise it lives until you revoke it.
- Copy the token — it starts with
hmp_and is shown once. HapMap keeps only a hash.
Revoking is instant, from the same screen. If a token leaks, revoke it and mint another — a leaked token can't mint more tokens, change your email or password, or touch your account settings.
Connect
Claude Code
claude mcp add --transport http hapmap https://mcp.hapmap.no/mcp \
--header "Authorization: Bearer hmp_your_token_here"
Claude apps (claude.ai)
Add a custom connector: Settings → Connectors → Add custom connector,
URL https://mcp.hapmap.no/mcp — no token to paste. claude.ai discovers
HapMap's sign-in on its own: a HapMap page opens, you enter your email and password,
tap Connect, and the connector is live. Behind the scenes that mints an
ordinary access token — you'll see it as oauth:… under
Settings → API access in the app, and revoking it there
disconnects claude.ai instantly. Connecting again just replaces it.
Any other MCP client
{
"mcpServers": {
"hapmap": {
"type": "http",
"url": "https://mcp.hapmap.no/mcp",
"headers": { "Authorization": "Bearer hmp_your_token_here" }
}
}
}
Then ask something worth asking:
# “What's happening near Øvre Holmegate tonight?”
# “Create a quiz-night happening at Cementen on Thursday at 19:00.”
# “Post to my happening's board that doors open at seven.”
# “Invite Ola and Kari to Thursday's quiz night.”
# “Tell Ola I'm running ten minutes late.”
What an AI can do
| Tool | Scope | What it does |
|---|---|---|
whoami | read | The account the token acts as |
search_places | read | Find venues and addresses by name — no coordinates needed |
get_place | read | Resolve a place to its name, address, and location |
search_happenings | read | Public happenings near a point, with optional text and category filters — and the presence numbers |
get_happening | read | One happening's details, with the presence numbers |
my_happenings | read | What you host, are going to, and are invited to, with the presence numbers |
create_happening | write | Host a happening at a searched place or exact spot |
read_board | read | A happening's message board |
post_board_message | write | Post to a board, as you |
list_friends | read | Your accepted friends — names, ids, and how close (0–3). Only your own list |
list_conversations | read | Your DMs and group chats with unread counts — never marks anything read |
read_conversation | read | Messages in one conversation, newest first |
send_direct_message | write | Message a friend, as you — they see your name and get one notification. Friends only, one-to-one |
list_guests | read | Who was invited to a happening and whether they said yes, no, or nothing yet |
withdraw_invitation | write | Take back an invitation nobody has answered, on a happening you host |
invite_friends | write | Invite friends to a happening you host — one notification each, answered in the app |
Every call is checked by HapMap itself — visibility, friendships, blocks, audiences. An AI holding your token sees exactly what you'd see, never more.
What the numbers mean
Every happening any tool returns carries the same two presence numbers, so three tools never give three pictures of one happening:
| Field | Counts | Says someone was there? |
|---|---|---|
goingCount | Hosts plus people who joined as going — intent | No. It is a forecast |
hereCount | People who verifiably arrived: checked in, or posted from inside the zone — presence | Yes. The only number that does |
search_happenings also carries the map's two glow channels under their own
names: forecast is the same number as goingCount and sizes the
field; activity is moments posted plus arrivals (it includes
hereCount) and lights it. A forecast never outshines a fact, so the two are
never mixed. All counts are aggregates — no tool lists who.
What an AI can never do
No token — any scope — can check in, view a moment, or upload media. Checking in says you were somewhere; viewing a moment spends its timer; a moment is proof of presence. An AI can plan your evening. It cannot have been there.
When it says no
| Answer | What it means |
|---|---|
401 | No token, a mistyped token, a revoked token, or one past its expiry. Mint a fresh one. |
403 mentioning write scope | The token is read-only. Mint one with write if you want the AI creating and posting. |
403 mentioning the app in your hand | The tool asked for something only a person in a place can do. That's by design, not a bug. |
404 on things you know exist | The token's owner can't see them — private happenings and audiences you're not in stay invisible. |