Der Elido-MCP-Server ist ein kleiner Node-Prozess, mit dem Claude Desktop, Cursor oder Claude Code aus einem Chat heraus Kurzlinks anlegen, auflisten und Klick-Zeitreihen lesen können. Er liegt im Monorepo unter packages/mcp-server, spricht MCP über Stdio und redet mit derselben REST-API wie alles andere.
Vorab eine Korrektur, weil eine frühere Version dieses Leitfadens sie falsch hatte: Das Paket ist nicht auf npm und noch nicht öffentlich. Stand 2026-11-11 liefert npm view @elido/mcp-server ein 404; ein öffentlicher Release kommt bald. Bis dahin führen Sie ihn aus einem lokalen Build aus. Alles Folgende wurde gegen den Code in packages/mcp-server und services/api-core geprüft.
Was MCP ist
Das Model Context Protocol ist ein offener Standard, mit dem ein KI-Client Tools aufrufen kann, die außerhalb des Modells liegen. Der Client startet einen Server oder verbindet sich mit ihm, fragt ihn nach einer Tool-Liste und sendet Tool-Aufrufe als JSON-RPC-Nachrichten. Der Server erledigt die Arbeit und gibt Text zurück, den das Modell liest. Das Modell hält nie Ihren API-Schlüssel; der Server tut es.
Die Spezifikation definiert zwei Transporte, Stdio für lokale Prozesse und Streamable HTTP für entfernte (MCP-Spezifikation, aktuelle Revision 2026-07-28, abgerufen am 2026-10-25). Der Elido-Server implementiert nur Stdio.
Was der Server tut
Er ist von Hand geschrieben, ohne das offizielle @modelcontextprotocol/sdk, um abhängigkeitsfrei zu bleiben. In src/index.ts beantwortet er vier Dinge: initialize (meldet die Protokollversion 2024-11-05), tools/list, tools/call und die Benachrichtigung notifications/initialized. Alles andere erhält einen Fehler "method not found". Es gibt keine Handler für Resources, Prompts oder ping.
Jeder Tool-Aufruf wird zu einer authentifizierten REST-Anfrage an ELIDO_API_BASE (Standard https://api.elido.app) mit Authorization: Bearer <key> und dem Header User-Agent: elido-mcp-server/0.1.0. Fehlgeschlagene Aufrufe kommen als Fehler zurück, der den HTTP-Status und die ersten 400 Zeichen der Antwort enthält.
| Tool | Gesendete Anfrage | Status |
|---|---|---|
create_link | POST /v1/workspaces/{id}/links | Funktioniert; wählt die erste Domain, wenn keine angegeben ist |
list_links | GET /v1/workspaces/{id}/links?limit&offset | Funktioniert; Limit 1 bis 100 |
query_analytics | GET /v1/workspaces/{id}/analytics/timeseries | Funktioniert; liefert {"items":[{"ts","count"}]} |
generate_qr | POST /v1/workspaces/{id}/qr | Keine passende Route in api-core gefunden |
list_workspaces | GET /v1/workspaces | Funktioniert; listet Workspaces, denen der Aufrufer angehört |
Zu generate_qr: api-core stellt ein öffentliches POST /v1/qr/generate und ein Design pro Link unter GET /v1/workspaces/{id}/links/{link_id}/qr bereit, aber nichts unter dem Pfad, den das Tool aufruft. Bis das abgeglichen ist, würde ich keinen Workflow darauf aufbauen. Es steht im Backlog.
Bauen und einen API-Schlüssel holen
Das Monorepo ist privat, die folgenden Schritte gelten also, sobald Sie den Paketquellcode haben (ein öffentlicher Release kommt bald). Bauen Sie das Paket:
pnpm install
pnpm --filter @elido/mcp-server build
Das erzeugt packages/mcp-server/dist/index.js. Sie brauchen Node 20 oder neuer (engines in dessen package.json).
Für den Schlüssel öffnen Sie Dashboard, dann API-Schlüssel (/dashboard/api-keys), benennen den Schlüssel nach dem Agenten und wählen eine Rolle. Das Formular bietet viewer, editor und admin an, Standard ist editor. Elido-Schlüssel tragen eine Workspace-Rolle, keine Scopes pro Tool. Ein Viewer-Schlüssel ist die schreibgeschützte Option: Er kann auflisten und Analytics lesen, und die API verweigert create_link. Setzen Sie ein Ablaufdatum, wenn der Schlüssel für einen Test gedacht ist. Kopieren Sie den Schlüssel, wenn er angezeigt wird, und halten Sie ihn aus der Versionskontrolle heraus.
Claude Desktop konfigurieren
Claude Desktop liest claude_desktop_config.json. Der Speicherort der Konfiguration und der Tab Developer-Einstellungen sind in der MCP-Dokumentation beschrieben (lokale Server verbinden, abgerufen am 2026-10-25). Unter macOS ist die Datei ~/Library/Application Support/Claude/claude_desktop_config.json, unter Windows %APPDATA%\Claude\claude_desktop_config.json.
{
"mcpServers": {
"elido": {
"command": "node",
"args": [
"/absolute/path/to/url-shortener/packages/mcp-server/dist/index.js"
],
"env": {
"ELIDO_API_KEY": "elido_your_key_here",
"ELIDO_WORKSPACE_ID": "42"
}
}
}
}
Verwenden Sie einen absoluten Pfad. ELIDO_WORKSPACE_ID ist nur dann optional, wenn der Schlüssel genau einen Workspace sieht; der Server ruft dann einmal GET /v1/workspaces auf und cacht die ID. Bei zwei oder mehr Workspaces wirft er einen Fehler, der Sie auffordert, die Variable zu setzen, setzen Sie sie also von Anfang an.
Starten Sie Claude Desktop nach dem Speichern neu. Erscheint der Server nicht, führen Sie denselben Befehl zuerst in einem Terminal aus. Ein fehlender Schlüssel stoppt den Prozess nicht, er gibt eine Warnung auf stderr aus, und jeder Tool-Aufruf schlägt dann fehl.
Cursor und Claude Code konfigurieren
Cursor liest dieselbe mcpServers-Form aus .cursor/mcp.json in einem Projekt oder aus ~/.cursor/mcp.json für alle Projekte (Cursor-MCP-Dokumentation, abgerufen am 2026-10-25). Fügen Sie den obigen Block ein, tragen Sie die Datei in .gitignore ein, weil sie einen aktiven Schlüssel enthält, und prüfen Sie den Server in Cursors MCP-Einstellungen.
Claude Code fügt einen Stdio-Server über die Kommandozeile hinzu (Claude-Code-MCP-Dokumentation, abgerufen am 2026-10-25):
claude mcp add --env ELIDO_API_KEY=elido_your_key_here --env ELIDO_WORKSPACE_ID=42 \
--transport stdio elido -- node /absolute/path/to/packages/mcp-server/dist/index.js
Schlüssel in einer Konfigurationsdatei liegen im Klartext. Geben Sie auf einem gemeinsam genutzten Rechner jeder Person einen eigenen Schlüssel, damit der Audit-Trail etwas bedeutet.
Zwei Sitzungen, mit den echten Anfrageformen
Das sind illustrative Gespräche, keine Aufzeichnungen, und die Zahlen sind erfunden. Die Tool-Argumente und Ergebnisfelder entsprechen dem Code.
Einen Kampagnenlink kürzen. Sie bitten Claude, https://shop.example.com/spring mit dem Slug spring und dem Tag spring zu kürzen. Es ruft create_link mit destination_url, slug, title und tags auf. Weil keine domain_id übergeben wurde, holt der Server zuerst GET /v1/workspaces/{id}/domains und nimmt die erste zurückgegebene. Hat Ihr Workspace mehrere Domains, übergeben Sie domain_id selbst. Die API antwortet mit dem Link-Datensatz einschließlich short_url, und Claude setzt ihn in den Entwurf. Ist der Slug vergeben, liefert die API 409 "slug already exists for this domain", und Claude kann einen anderen wählen.
Die Klicks der letzten Woche lesen. Sie bitten um tägliche Klicks für einen Link, in Berliner Zeit. Claude ruft query_analytics mit link_id, from, to, interval: "day" und tz: "Europe/Berlin" auf. Daten haben die Form YYYY-MM-DD, und die API lehnt einen Bereich ab, in dem from nicht vor to liegt, übergeben Sie als to also den Tag nach Ihrem letzten Tag. Lassen Sie sie weg, sind es die letzten 30 Tage. Das Ergebnis ist {"items": [{"ts": "...", "count": 312}, ...]}. Ein Feld total gibt es nicht, bitten Sie Claude also, die Zählwerte zu summieren. Nur Klicks: Über dieses Tool kommt keine Aufschlüsselung nach Land, Gerät oder Referrer.
Sicherheit und Limits
Rollen, nicht Scopes. Wählen Sie die niedrigste Rolle, die die Aufgabe erledigt. Viewer für Reporting-Agenten, editor für solche, die Links anlegen, admin nur mit besonderem Grund.
Was Ihre Maschine verlässt. Der Server sendet Anfragen an Ihre Elido-API-Basis und nirgendwohin sonst. Was Ihr KI-Client an seinen eigenen Anbieter sendet, regelt dessen Richtlinie.
Audit-Trail. Das Erstellen eines Schlüssels löst ein Audit-Ereignis api_key.created aus, das Erstellen eines Links link.created. Ich habe nicht geprüft, wie ein Ereignis einem einzelnen Schlüssel zugeordnet wird, verlassen Sie sich also nicht darauf, dass das Audit-Log zwei Agenten unterscheidet. Geben Sie jedem einen eigenen Schlüssel und beobachten Sie die Schlüsselliste.
Rate Limits. Aufrufe zählen gegen das Limit des Workspaces: 10 Anfragen pro Sekunde bei Free, 30 bei Pro und 100 bei Business, mit Burst-Kontingenten von 20, 60 und 200 (services/api-core/internal/httpserver/server.go). Ein Agent, der Hunderte von Links anlegt, sollte über die API POST /v1/workspaces/{id}/links/bulk nutzen, wie beim Bulk-Import aus einem Google Sheet.
Remote-MCP. Das wäre ein gehosteter Endpunkt mit OAuth, sodass ein Claude-Connector Elido ohne lokalen Prozess erreichen könnte. Er ist geplant, aber nicht gebaut, und der Integrationskatalog im Dashboard listet nur den lokalen Server. Nutzen Sie vorerst diesen.
Protokoll-Drift. Der Server deklariert 2024-11-05, während die aktuelle Revision der Spezifikation 2026-07-28 ist. Wir haben ihn nicht gegen jede Client-Version getestet, prüfen Sie also nach einem Update den Status des Servers in Ihrem Client.
Wie es weitergeht
Die oben genannten Lücken stehen im Backlog: das Paket veröffentlichen, generate_qr reparieren, Streamable HTTP und den Remote-Endpunkt ergänzen, weitere Tools hinzufügen (Update, Löschen, Geo-Aufschlüsselungen) und die Audit-Zuordnung pro Schlüssel. Für einen anderen Weg zur selben Agenten-Idee siehe den Gemini-Leitfaden und den ChatGPT-Leitfaden; zur Schlüsselhygiene API-Schlüssel-Berechtigungen für Link-Tools.
Weiterlesen im Blog
-
API-Schlüssel-Berechtigungen für Link-Tools - Rollen, geringste Rechte und Rotation.
-
Kurzlinks aus einem Google Sheet per Bulk importieren - der richtige Weg für Hunderte von Links.
-
Gemini-URL-Shortener - wo Tool-Aufrufe in Gemini funktionieren.
-
ChatGPT-URL-Shortener - was funktioniert und was nur so tut.
-
Kurzlinks als Terraform - Link-Verwaltung im Infrastruktur-Stil.
-
Rate Limits und Idempotenz der URL-Shortener-API - wie sich Limits für Clients verhalten.
-
Marius
Häufig gestellte Fragen
Ist der Elido-MCP-Server auf npm?
Noch nicht. Das Paket ist nicht auf npm (`npm view @elido/mcp-server` liefert Stand 2026-11-11 ein 404), `npx -y @elido/mcp-server` schlägt also fehl. Ein öffentlicher Release kommt bald. Bis dahin läuft der Server nur aus einem lokalen Build des Pakets (packages/mcp-server in unserem privaten Monorepo), auf dessen kompilierte Datei dist/index.js Sie Ihren MCP-Client richten.
Welche Tools stellt der Elido-MCP-Server bereit?
Fünf: create_link, list_links, query_analytics, generate_qr und list_workspaces. Die ersten vier brauchen einen Workspace, der aus ELIDO_WORKSPACE_ID kommt oder daraus, dass der Schlüssel genau einen Workspace sieht. generate_qr ruft eine Route auf, die wir in api-core nicht finden konnten, behandeln Sie es also als unzuverlässig, bis es behoben ist.
Wie mache ich einen MCP-Schlüssel schreibgeschützt?
Erstellen Sie den API-Schlüssel im Dashboard mit der Rolle viewer. Schlüssel tragen eine Workspace-Rolle (viewer, editor oder admin, standardmäßig editor), keine Scopes pro Tool. Ein Viewer-Schlüssel kann Links auflisten und Analytics lesen, und create_link kommt als Berechtigungsfehler von der API zurück.
Hat Elido eine Remote-MCP-URL für Claude-Connectoren?
Noch nicht. Es gibt keinen gehosteten MCP-Endpunkt mit OAuth, ein Remote-Server ist geplant. Nutzen Sie den lokalen Stdio-Server, der die oben aufgeführten fünf Tools bereitstellt.
Welchen MCP-Transport und welche Protokollversion nutzt der Server?
Nur Stdio, mit zeilenweisem JSON-RPC 2.0. Er beantwortet initialize mit der Protokollversion 2024-11-05 und verarbeitet tools/list und tools/call. Die aktuelle MCP-Spezifikation definiert zusätzlich einen Streamable-HTTP-Transport, den dieser Server nicht implementiert.
Zählen Tool-Aufrufe gegen mein Rate Limit?
Ja. Der Server ist ein gewöhnlicher API-Client, es gilt also das Limit pro Workspace: 10 Anfragen pro Sekunde bei Free, 30 bei Pro und 100 bei Business, mit Bursts von 20, 60 und 200. Für Hunderte von Links nutzen Sie den Bulk-Create-Endpunkt statt eines Tool-Aufrufs pro Link.
Elido testen
URL einfügen, kurzer Link in Sekunden
Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.
Keine Anmeldung nötig. Kostenlos registrieren für 50 Links im Monat.