For AI agents
Friendship Tracker ships an MCP server, a Python CLI, REST and GraphQL APIs, drop-in libraries in 15 languages, and signed webhook subscriptions. One token, one host, every surface documented. From €1/month.
Pick whichever interface your agent already speaks. They all hit the same data and obey the same rules.
Model Context Protocol (MCP)
Native MCP server, one read tool and one write tool per data model. Drops straight into Claude Desktop, Cursor, Cline or any MCP host.
Python CLI
Single-file, stdlib-only Python client. CSV, NDJSON, table output, dry-run, retry, idempotency keys, profile auth - the things shell pipelines actually need.
REST + GraphQL
Plain REST under `/xapi2/data/...` plus an optional GraphQL endpoint with depth + complexity limits. Same auth, same audit log, same rate limits.
15-language client libraries
Single-file, vendorable libraries for Python, TypeScript, JavaScript, Go, Java, Rust, C#, C++, PHP, Ruby, Kotlin, Swift, Dart, Elixir, Clojure. No package manager required.
Signed webhooks
HMAC-signed JSON delivery, exponential backoff, auto-disable after sustained failure, replay-safe via signed timestamps. Subscribe per event type from a single dialog.
Live realtime channel
Same WebSocket the web UI uses. Subscribe to record changes; agents stay in sync without polling. CRUD operations are also available over WS for low-latency loops.
From €1 per month
One honest price. 30-day refund. No usage-based billing surprises, no per-call meter, no separate "AI tier".
Hosted in Germany
Application servers and database in Germany, subject to German law. No US subprocessor in the request path. GDPR-aligned by default.
Ad-free, telemetry-free responses
Responses contain your data and nothing else. No injected ads, no tracker pixels, no third-party calls inside the API path. Agents reason on clean payloads.
Stable APIs by people who use them
Friendship Tracker is built and run by the same engineers who answer the support email. The API your agent depends on is the same API the web UI uses - we cannot break it without breaking ourselves.
Append-only audit log
Every write through any surface (web, MCP, CLI, REST, GraphQL, WS) is recorded with actor, timestamp and diff. Operators can answer 'who did what' even months later.
One token, scoped + revocable
Personal access tokens are scoped per data model and per operation. Revoke from the web UI; agents see a 401 within seconds. No re-auth dance, no service-account sprawl.
Two install paths, both single-file Python, both auto-update on every run. Pick MCP for in-chat assistants, the CLI for shells and CI.
Install the MCP server, then point your host at it.
curl -fsSL https://friendship-tracker.com/xapi2/mcp/install.sh | sh{
"mcpServers": {
"friendship": {
"command": "friendship-mcp",
"args": ["serve"]
}
}
}Install the CLI, log in once, then pipe data.
curl -fsSL https://friendship-tracker.com/xapi2/cli/install.sh | sh# One-time login, then list activity as JSON
friendship login
friendship activity list --format ndjsonIf your agent already speaks HTTP, no install is needed. Same Bearer token, same data, same audit.
# List activity via REST
curl -H "Authorization: Bearer $TOKEN" \
https://friendship-tracker.com/xapi2/data/activity?limit=20# Same query via GraphQL
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
https://friendship-tracker.com/xapi2/graphql \
-d '{"query":"{ objects(type: \"activity\", limit: 20) { id data } }"}'11 data models are exposed end-to-end. Each one supports list, get, filter, create, update and delete via every interface above.
Every write accepts an `Idempotency-Key` header so retries never duplicate. Reads are cacheable; writes return the canonical record so an agent never has to re-read after a successful PATCH. Errors come back as a typed envelope ({error, status, hint}) in English and German, so a model can branch on the code without parsing prose.
Rate limits are per-token and surface a `Retry-After` when crossed; the CLI and the SDKs honour it automatically. WebSocket reconnects are tracked per token so an agent that loses its connection picks up from the last delivered event without replaying the journal.
Every change made by an agent lands in the append-only audit log, attributed to the token. Operators can revoke a token in one click and see exactly which records it touched.
Sign in to Friendship Tracker, open the Integrations dialog, click New token, scope it to the data models the agent needs, copy the pat_… value. Tokens are listed and revocable forever after. Programmatic sign-up for agents is on the way; until then, a human creates the token once and the agent uses it indefinitely.
Both. Every account gets its own MCP server, generated from the data model the account already uses. The server is a single Python file you install with one curl line; it auto-updates on every run, signs requests with your personal access token, and exposes a read tool and a write tool per data model.
Yes. Plain REST under https://friendship-tracker.com/xapi2/data/..., GraphQL at https://friendship-tracker.com/xapi2/graphql, signed webhooks for push, a WebSocket for live updates. The 15-language client libraries are single-file drops if you do not want a package manager in the loop.
From €1 per month. There is no per-call meter, no separate "AI tier", no usage-based billing surprise. The price covers human users and machine users alike. 30-day refund window if it is not a fit.
Application servers and the database run in Germany, on machines we operate ourselves. We do not train models on your data. We do not sell, share, or syndicate it. Backups are encrypted, snapshotted daily, kept 30 days. The full technical detail is at /security.
Friendship Tracker is built and operated by the engineers who answer the support email. There is no third-party dependency in the request path that we do not also depend on for the web UI. Status, uptime and recent incidents are visible at /status; reach us directly via /contact.