Skip to content

Evanesca opens soon: this page shows how the chat will work.

Evanesca for your AI agents, over MCP.

One URL connects Model Context Protocol clients to the Evanesca API: Claude Code, Cursor or Cline with an API key, ChatGPT and Claude as a connector signed in with OAuth 2.1. Your agent can read the catalogue, run a chat completion or create embeddings on models run in Europe, search and read the web, and check your credit. Billing is the REST API's: per token for the models, per call for web search.

Client documentation read on 6 Oct 2026

SoonOpening soon: what follows describes the service as it will work.

The endpoint

Endpoint
https://evanesca.app/api/mcp

It speaks JSON-RPC 2.0 over MCP's Streamable HTTP transport, in its stateless form: one JSON-RPC message per POST request, answered with plain JSON. A notification gets an HTTP 202 with no body; there is no session and no server-sent stream (GET answers 405). The methods are initialize, tools/list, tools/call and ping.

Protocol errors come back as JSON-RPC errors. A tool that fails — operator down, credit at zero, a model Evanesca does not serve (the API's model_not_found) — returns a result flagged isError, which the agent can read before deciding what to do.

tools/list — no key needed
curl https://evanesca.app/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Nine tools

Three read the catalogue and need no key. The other six need a key — or, through a connector, the right shown: chat_completion and create_embedding are billed per token, like the REST API; web_search and web_fetch are billed per call; check_balance and get_profile read your account.

ToolWhat it doesConnector right
list_modelsLists the chat and embedding models: where each runs, its operator, its price and, where checked, its context window and tool calling. It can filter by kind or by operator.None
get_modelEverything about one model, by its ID: maker, licence, operator, where it runs, checks, retention, prices, tool calling.None
search_modelsFinds models by keyword in their name, maker, operator or type.None
chat_completionRuns a chat completion like POST /chat/completions, billed per token. Takes model, messages, temperature, max_tokens, tools and tool_choice; returns the whole answer (no streaming), its usage, and the operator and place that served it.inference
create_embeddingCreates embeddings like POST /embeddings, billed per input token, and returns the full vectors.inference
check_balanceReturns your remaining prepaid credit, in euros.account:read
web_searchSearches the live web through Linkup and returns up to 8 results, each with the text of its page — not just a snippet — cut at 15,000 characters. Optional depth: “fast” or “standard”, the default and more thorough. €0.0076 a search.web
web_fetchReads one web page — an http or https address — through Linkup and returns its text as markdown, cut at 15,000 characters. €0.0015 a page.web
get_profileReturns the account behind the connection — an ID that never changes, its name and its e-mail address — so that ChatGPT can tell connected accounts apart.account:read

Connect a client with a key

You need a client that accepts a remote MCP server over Streamable HTTP and lets you add a header. Point it at the endpoint and send your key as Authorization: Bearer. Each client has its own format; these follow the documentation of Claude Code, Cursor and Cline, read on 6 Oct 2026.

Claude Code — one command
claude mcp add --transport http evanesca https://evanesca.app/api/mcp \
  --header "Authorization: Bearer $EVANESCA_API_KEY"
Claude Code — .mcp.json
{
  "mcpServers": {
    "evanesca": {
      "type": "http",
      "url": "https://evanesca.app/api/mcp",
      "headers": {
        "Authorization": "Bearer ${EVANESCA_API_KEY}"
      }
    }
  }
}
Cursor — .cursor/mcp.json
{
  "mcpServers": {
    "evanesca": {
      "url": "https://evanesca.app/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:EVANESCA_API_KEY}"
      }
    }
  }
}
Cline — cline_mcp_settings.json
{
  "mcpServers": {
    "evanesca": {
      "type": "streamableHttp",
      "url": "https://evanesca.app/api/mcp",
      "headers": {
        "Authorization": "Bearer <EVANESCA_API_KEY>"
      }
    }
  }
}

Claude Code and Cursor read the key from your environment (${EVANESCA_API_KEY}, ${env:EVANESCA_API_KEY}). In Cline's file, paste the key itself in place of <EVANESCA_API_KEY>, and keep that file out of any repository.

ChatGPT and Claude: the OAuth 2.1 connector

ChatGPT and Claude do not take a key in a header: they connect with OAuth 2.1. You sign in to your Evanesca account and approve what the connector may do; no key is copied anywhere. What these clients expect is described in Claude's guide to custom connectors and OpenAI's MCP authentication guide, read on 13 Oct 2026.

  1. Add the connector

    In ChatGPT or Claude, add a custom connector with the endpoint URL, https://evanesca.app/api/mcp. The client reads where to sign you in from the endpoint itself (OAuth protected-resource metadata, RFC 9728).

  2. Sign in and approve

    Evanesca's consent screen names the client, the rights it asks for and where you will be sent back. A client that publishes its identity at an https address — ChatGPT does, and Claude offers it — shows with that address; one that registered itself is flagged as unverified.

  3. Use it, cut it off at any time

    The connector's calls are billed to your credit like any API call. The connection appears among your API keys as “<client> (OAuth)”: revoke it there to cut it off.

Connector rights
RightWhat it allowsTools
inferenceRun models on your behalf — chat completions and embeddings, billed to your credit like any API call.chat_completion and create_embedding
webSearch and read web pages, billed per call.web_search and web_fetch
account:readSee the account's name, e-mail address and credit balance.check_balance and get_profile

Reading the catalogue never needs a right. ChatGPT uses get_profile to recognise the connected account: it returns an ID that changes neither when tokens are renewed nor when you reconnect.

An access token lasts 1 hour; the client renews it with a refresh token that lasts 60 days and is replaced at each use. An old refresh token presented again — after a 30-second grace period — cuts the whole connection, as OAuth 2.1 recommends against theft. Tokens are opaque, Evanesca keeps only their hash, and they work only on the MCP endpoint, not on the REST API. An expired or revoked token gets HTTP 401 with a WWW-Authenticate header, so the client renews it or asks you to sign in again; a tool called without the right it needs returns an error result that names that right.

For client developers: PKCE with S256, the resource parameter (RFC 8707) and the iss parameter on every redirect (RFC 9207). Discovery at https://evanesca.app/.well-known/oauth-protected-resource and https://evanesca.app/.well-known/oauth-authorization-server. A client identifies itself with a metadata document published at its https client_id, or registers itself (dynamic registration, RFC 7591, public clients only). No OpenID Connect.

Keys, connections and billing

The key goes in the Authorization header of every request, as with the REST API. Without it, the catalogue tools still answer — an agent can look before it asks for anything; the others return an isError result asking for a key. An API key carries every right; a connector carries only the ones you approved.

chat_completion reaches the same models as the REST API, all run in Europe, and its result names the operator that answered and the place (Where calls run).

Billing is the REST API's: same prices per token, same credit, same history in your account. A call that fails at the operator is not charged. web_search and web_fetch are billed per call — €0.0076 a search, €0.0015 a page. Once your credit is at zero, the paid tools refuse new calls; calls already running can take it slightly below zero, and the difference comes off your next credit purchase.

Frequently asked questions

Which clients can connect?

Two kinds. Clients that take a remote MCP server with a request header — Claude Code, Cursor and Cline among them — use an API key, set up as shown above. ChatGPT and Claude connect with OAuth 2.1: you add Evanesca as a custom connector with the endpoint URL, sign in to your account and approve the rights it asks for. There is no Evanesca SDK to install.

Can I use Evanesca inside ChatGPT or Claude?

Yes, as a custom connector: give ChatGPT or Claude the endpoint URL, sign in to Evanesca and approve the rights it asks for — run models, search the web, read your account. Calls made through the connector are billed to your credit like any API call, and you can cut the connection at any time from your API keys.

Do all tools need a key?

No. list_models, get_model and search_models answer without one. The others need your key in the Authorization header — or, through a connector, the right shown in the table — and all of them except check_balance and get_profile also need credit above zero.

Does a call over MCP stay in Europe?

The model call does: every model Evanesca serves runs in Europe, and chat_completion's result names the operator and the place. web_search and web_fetch are the exception: they send the query or the address to Linkup, a French company, and Evanesca has not verified where its servers run.

Where does web search go?

To Linkup, a French company — Linkup Technologies SAS, registered office in Fresnes, France — on Evanesca's own Linkup account. Linkup receives the query your agent writes, or the address of the page to read: never the conversation. Evanesca has not verified where its servers run; its own privacy policy applies, read on 13 Oct 2026. Each search costs €0.0076 and each page €0.0015, VAT included, from your credit.

Does the server keep state between calls?

No. The server is stateless: each POST carries one JSON-RPC request and gets its answer in the same HTTP response, with no session ID.

Give your agent models run in Europe.

One key, one URL, and your MCP client sees the whole catalogue, with where each model runs.