Other clients
Connect any MCP client that supports remote servers with sign-in, and find the connection details developers need.
Lahuta works with any MCP client that can add a remote server by URL and sign in through the browser. If your client doesn't have its own page here, look in its settings for an option to add a remote, HTTP or "streamable HTTP" MCP server.
Add a remote HTTP server with this URL:
https://api.lahuta.org/mcpDon't add headers, an API key or an OAuth client ID. Lahuta doesn't need any.
When the client opens your browser, sign in with your Lahuta account. If you belong to more than one organization, choose the one the client should use by default.
What your client needs
- It supports the streamable HTTP transport. Lahuta speaks the current MCP transport over plain HTTP POST. The older "HTTP with SSE" transport isn't supported, so a client that only asks for an SSE URL can't connect.
- It handles MCP's browser sign-in, also called OAuth. Clients that only accept a fixed token or header won't work.
- It runs as an app, a command-line tool or on a server. Lahuta turns away requests that come from code running inside a web page. Desktop apps, terminal tools and hosted assistants like Claude, ChatGPT and Gemini aren't affected.
Config examples
Many clients read a JSON file with an mcpServers list. For those, the entry looks like this:
{
"mcpServers": {
"lahuta": {
"url": "https://api.lahuta.org/mcp"
}
}
}Key names differ between clients, so check your client's docs for the exact shape.
VS Code
In VS Code, run MCP: Add Server from the Command Palette and follow the prompts, or edit the file yourself. Use .vscode/mcp.json for one workspace, or MCP: Open User Configuration for all of them:
{
"servers": {
"lahuta": {
"type": "http",
"url": "https://api.lahuta.org/mcp"
}
}
}VS Code opens your browser to sign in the first time it starts the server. See VS Code's MCP servers guide for the rest.
For developers
If you're building your own client or debugging a connection, these are the details.
Transport
| Detail | Value |
|---|---|
| Endpoint | POST https://api.lahuta.org/mcp |
| Transport | Streamable HTTP, JSON-RPC 2.0 |
| Protocol version | 2025-11-25 |
| Headers | Content-Type: application/json, and Accept listing both application/json and text/event-stream |
| Sessions | initialize returns an Mcp-Session-Id. Send it on every later request. |
| Other methods | Only POST is served. GET and DELETE return 405, so there's no standalone event stream and no session delete. |
Origin header | Requests that carry one get 403, so browser-based clients can't connect. |
Sessions are kept in memory on one server. If a request comes back 404 for an unknown session, start a new one with initialize, as the MCP spec asks clients to do. Most clients do this on their own.
Sign-in
A request without a valid token gets 401 and points to the sign-in details:
HTTP/2 401
www-authenticate: Bearer resource_metadata="https://api.lahuta.org/.well-known/oauth-protected-resource"The protected resource metadata names the authorization server:
curl https://api.lahuta.org/.well-known/oauth-protected-resource{
"resource": "https://api.lahuta.org/mcp",
"authorization_servers": ["https://auth.lahuta.org"],
"bearer_methods_supported": ["header"]
}The authorization server at https://auth.lahuta.org publishes its metadata at /.well-known/oauth-authorization-server. It supports the authorization code flow with PKCE (S256), refresh tokens, client ID metadata documents and dynamic client registration, so your client can register itself. Use https://api.lahuta.org/mcp as the resource, and send the access token as Authorization: Bearer <token>.
The token identifies a person. Lahuta works out their organization and role on each tool call, from the organization chosen at sign-in or from the call's org argument.
Tools and results
- Every tool accepts an optional
orgargument, a slug or id, on top of its own arguments. See Organizations and permissions. - Every tool carries
readOnlyHintanddestructiveHintannotations. When a tool returns an object, it has anoutputSchema, and the result comes back asstructuredContentplus the same JSON as text. - When Lahuta refuses a call, the result has
isError: trueand a JSON body with areason, likeForbiddenorNotFound, and amessage, likepermission: events:manage. - Arguments that don't match the tool's schema get a JSON-RPC invalid params error.
- An unexpected failure returns
isError: truewith the text "Tool execution failed due to an internal server error."
GET https://api.lahuta.org/mcp/catalog returns the number of tools per area, with no sign-in. The full list is in the Tools reference.
Building a website feature instead?
MCP acts as a signed-in person. To add signups, event listings or checkout to your own site with an API key, use the Org API.