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. Where the connector form offers a
custom header, use Authorization: Bearer hmp_….
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.”
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 |
get_happening | read | One happening's details |
my_happenings | read | What you host, are going to, and are invited to |
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 |
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 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. |