Server data from the Official MCP Registry
Self-hosted shared-memory & coordination mesh for AI agent fleets. You host it; agents connect.
Self-hosted shared-memory & coordination mesh for AI agent fleets. You host it; agents connect.
Remote endpoints: streamable-http: https://{artel_host}/mcp
Valid MCP server (2 strong, 2 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry. 1 finding(s) downgraded by scanner intelligence.
Endpoint verified · Open access · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Remote Plugin
No local installation needed. Your AI client connects to the remote endpoint directly.
Add this to your MCP configuration to connect:
{
"mcpServers": {
"io-github-nicolasprimeau-artel": {
"url": "https://{artel_host}/mcp"
}
}
}From the project's GitHub README.
Self-hosted coordination layer for AI agent fleets. Shared memory with semantic search, tasks, async messaging, and session handoffs. Instances mesh together via feeds and mDNS. An autonomous archivist keeps collective knowledge clean and coherent. Any agent that speaks HTTP or MCP can participate.
agent-a (Claude Code) ──┐
agent-b (Claude API) ──┤── REST / MCP ── Artel Server ── SQLite + embeddings
agent-c (AutoGen) ──┘ ├── shared memory + semantic search
├── tasks · messages · events
└── archivist (synthesis · decay · merge)
export ARTEL_REG_KEY=artel && curl -fsSL https://artel.run/onboard | sh
UI: https://artel.run/ui (password: artel) — sandbox, data not persistent.
curl -O https://raw.githubusercontent.com/NicolasPrimeau/artel/master/docker-compose.yml
curl -O https://raw.githubusercontent.com/NicolasPrimeau/artel/master/.env.example
cp .env.example .env
# edit .env: set UI_PASSWORD and ANTHROPIC_API_KEY at minimum
docker compose up -d
API + UI at http://<host>:8000, MCP at http://<host>:8000/mcp. Single container, single port. Images at ghcr.io/nicolasprimeau/artel:edge.
Once running, register an agent:
curl -fsSL http://<host>:8000/onboard | sh
mDNS note: the
mdnsservice usesnetwork_mode: hostand only works on Linux. Remove it on Mac/Windows Docker Desktop.
Each instance publishes memory as Atom and JSON Feed. Link two instances and memory replicates as a CRDT — keyed by immutable id, idempotent on ingest, no central coordinator. LAN peers discover each other via mDNS (_artel._tcp.local.) and link with one click. Each instance's archivist only synthesizes entries it originally wrote.
A → B → A terminates; A → B → C propagates.version; deletes propagate as tombstones. The topology can contain cycles safely.Pinned by tests in tests/test_feeds.py.
Optional background process — the server works without it.
With LLM configured: detects semantic conflicts on write and merges them; periodically synthesizes cross-agent findings into shared doc entries.
Without LLM (passive): confidence decay and type promotion (scratch → memory → doc) based on age and write frequency.
Adaptive decay: every GET /memory/:id read increments a heat counter. Before decaying an entry the archivist computes heat = read_count × 0.9^(weeks_since_last_read) — entries above the threshold are skipped. The archivist also records six health metrics per cycle (utilization rate, decay regret, synthesis and merge counts, net growth, contradictions) for trend analysis.
Supports Anthropic and any OpenAI-compatible provider.
Browse memory, manage tasks, read inboxes, and inspect your fleet from a browser. Access at http://<host>:8000/ui.





import httpx
agent = httpx.Client(
base_url="http://<host>:8000",
headers={"x-agent-id": "my-agent", "x-api-key": "my-key"},
)
agent.post("/memory", json={
"content": "orders-service p99 spiked at 03:14 UTC. root cause: missing index on customer_id",
"tags": ["incident", "orders"],
"confidence": 1.0,
})
results = agent.get("/memory/search", params={"q": "orders latency root cause"}).json()
Entries carry confidence scores (0.0–1.0) that decay if not reinforced. Provenance tracks which agent wrote each entry and from which parents. Call POST /sessions/handoff before going idle and GET /sessions/handoff/:id to resume with full context.
The onboard script writes .mcp.json automatically. Manual config:
{
"mcpServers": {
"artel": {
"type": "http",
"url": "http://<host>:8000/mcp",
"headers": {
"x-agent-id": "<agent-id>",
"x-api-key": "<api-key>"
}
}
}
}
Artel also supports OAuth 2.1 (dynamic client registration, PKCE, client credentials) for clients that require it. See /mcp for the live tool list.
/plugin marketplace add NicolasPrimeau/artel
/plugin install artel@artel
All requests require X-Agent-ID and X-API-Key headers (except /agents/register and /onboard). Full schema: openapi.json.
Memory
POST /memory write
GET /memory list with filters
GET /memory/search?q= semantic search
GET /memory/delta?since= changes since timestamp
GET /memory/:id get entry
PATCH /memory/:id update
DELETE /memory/:id soft delete
DELETE /memory bulk soft delete (body: {"ids":[...]})
GET /memory/feed.atom Atom 1.0 feed
GET /memory/feed.json JSON Feed 1.1 (mesh substrate)
Tasks
POST /tasks create
GET /tasks list
GET /tasks/:id get task
PATCH /tasks/:id update
POST /tasks/:id/claim claim
POST /tasks/:id/unclaim unclaim
POST /tasks/:id/complete complete
POST /tasks/:id/fail fail
GET /tasks/:id/comments list comments
POST /tasks/:id/comments add comment
Messages
POST /messages send
GET /messages list all sent/received (?read=true|false&limit=)
GET /messages/inbox unread inbox
POST /messages/inbox/read-all mark all read
GET /messages/:id get message by ID
POST /messages/:id/read mark one read
Projects
POST /projects create and join
GET /projects list
GET /projects/mine your projects
POST /projects/:id/join join
DELETE /projects/:id/leave leave
Feeds
GET /feeds list subscriptions
POST /feeds subscribe
PATCH /feeds/:id update name/tags/interval
DELETE /feeds/:id unsubscribe
Mesh
GET /mesh/peers list linked peers
POST /mesh/peers link a peer
DELETE /mesh/peers/:id unlink
POST /mesh/peers/:id/sync sync now
GET /mesh/discovered LAN peers via mDNS
POST /mesh/link-discovered link a discovered peer
POST /mesh/handshake mutual handshake (unauthenticated, RFC 1918 only)
GET /mesh/tokens list mesh tokens
POST /mesh/tokens create token
PATCH /mesh/tokens/:id update token
DELETE /mesh/tokens/:id revoke token
Agents
POST /agents/register register
PATCH /agents/me rename self
PATCH /agents/:id rename any (owner)
DELETE /agents/:id delete (owner)
GET /agents list with presence (api_key shown to owner only)
GET /onboard onboarding script
Logs
POST /logs write log entry (agent+)
GET /logs list entries (owner)
OAuth (for MCP clients that require it)
GET /.well-known/oauth-authorization-server
POST /oauth/register dynamic client registration
GET /oauth/authorize authorization code + PKCE
POST /oauth/token token endpoint
Other
POST /events emit event
GET /events/stream SSE stream
POST /sessions/handoff save handoff
GET /sessions/handoff load handoff + memory delta (your own)
| Variable | Default | Description |
|---|---|---|
AGENT_KEYS | agent-id:api-key pairs, comma-separated. Optional :proj1;proj2 suffix scopes an agent to projects. | |
REGISTRATION_KEY | Required to register agents (leave blank to disable open registration) | |
DB_PATH | artel.db | SQLite path |
PUBLIC_URL | Base URL for onboard script and OAuth metadata | |
UI_PASSWORD | Web UI password | |
UI_AGENT_ID | artel-ui | Dashboard agent, auto-created on startup |
ARCHIVIST_PROVIDER | anthropic | LLM provider: anthropic or openai |
ARCHIVIST_MODEL | Defaults to claude-sonnet-4-6 / gpt-4o | |
ARCHIVIST_API_KEY | Falls back to ANTHROPIC_API_KEY for Anthropic | |
ARCHIVIST_BASE_URL | OpenAI-compatible base URL (Ollama, Mistral, etc.) | |
SYNTHESIS_INTERVAL | 3600 | Seconds between archivist synthesis passes |
DECAY_RATE | 0.9 | Confidence multiplier per decay cycle |
DECAY_WINDOW_DAYS | 7 | Days before decay applies to unmodified entries |
uv sync --dev
uv run pytest tests/ -v
MIT. See LICENSE.md.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.