griffin
Provides tools for interacting with GitLab, such as opening draft merge requests on new branches (gitlab_propose).
Provides tools for querying Grafana, including running dashboard panel queries.
Provides tools for interacting with Kubernetes clusters, including status checks, resource retrieval, logs, in-pod disk usage, secrets, and CNPG operations.
Provides tools for managing MikroTik routers, with changes limited to items Griffin itself created.
Provides tools for interacting with PostgreSQL databases.
Provides tools for querying Prometheus metrics and running dashboard panel queries.
Provides tools for sending and receiving messages via Telegram/Bale bots and a Telegram account bridge.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@griffinAsk the research agent to summarize the latest incident and wait for its reply."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Griffin
A self-hosted shell for a small team of agents that work for you. You make the agents — what each one is, what it may touch, who may ask it — and they answer from typed tools instead of from the model's memory.
Node 24 · Cursor or Claude Agent SDK · SQLite · no SaaS control plane · MIT
Two minutes to your own
git clone <this repo> griffin && cd griffin
npm ci && npm run build
mkdir -p data workspace
echo "sk-ant-…" > data/anthropic.api-key && chmod 600 data/anthropic.api-key # or data/cursor.api-key
GRIFFIN_DATA=./data GRIFFIN_WORKSPACE=./workspace PORT=3100 node apps/server/src/index.mjsOpen http://127.0.0.1:3100, log in with the token at data/owner.token, and start talking to the
agent that is already there. No cluster, no vault, no YAML: a fresh install is a chat with one
agent, and everything else is something you add when you want it.
Or stay in the terminal:
node bin/griffin.mjs "what changed in the last deploy?" # streams the answer
node bin/griffin.mjs -i # keep the chat open
node bin/griffin.mjs agents # who exists, what they may usePrefer Docker? docker compose -f deploy/compose.yaml up -d --build runs the same thing.
To look around before wiring anything up, GRIFFIN_DEMO=1 GRIFFIN_AUTH=off … replaces the model
with a scripted stand-in — the screenshots on this page are that demo.
Related MCP server: swarm-mcp
Make an agent
#/agents → ایجنت جدید: an id, a name, one line about its job, and its instructions. Then switch on the tools it may use, and say who may call it — the owner, another agent, a scheduled job, a colleague on a messenger, or an external agent over MCP — and which of its tools each of them gets.
Agents are rows in a table, not code. Quotas are enforced where tools are handed to the model, so a
tool a caller was not given does not exist for that run. docs/agents.md explains
the model; examples/agents/ has profiles you can import as a starting point
(a researcher that only reads, an infrastructure agent, two CDN agents).
What you get
Agents that delegate. delegate returns immediately and reports back when the subtask lands, so
the agent you are talking to stays free; ask_agent is the short blocking variant. Each agent picks
its own engine (Cursor or Claude) and model.
Charts and files in the conversation — the agent draws Vega-Lite from real rows, and images, video, PDF, Markdown and CSV render inline. The same chart goes to a messenger as an image.
Scheduled jobs — a prompt, a trigger and a delivery target; each run gets its own hidden chat, so a job that misbehaves leaves the same trace a person's chat would.
Messengers and other agents — Telegram/Bale bots and a Telegram account bridge; an MCP endpoint where another agent (Claude Code, for instance) connects with its own scoped token and gets task-shaped tools: send, wait, reply, cancel.
No interface, when that is better. The core is the product; the UI is one client of it. There is
a terminal client, a Bearer-authenticated HTTP API, MCP for other agents, messengers, and scheduled
jobs that deliver where you already are — and GRIFFIN_WEB=off runs the whole thing headless. See
docs/interfaces.md.
Infrastructure tools, if you want them. A separate broker process holds credentials and exposes
typed tools: Kubernetes (status, get, logs, in-pod df, secrets, CNPG), Prometheus and Grafana
(including running a dashboard panel's own query), PostgreSQL, S3, GitLab, MikroTik routers,
ArvanCloud and NSIN CDNs, DNS/HTTP/TLS probes. Each pack appears only once you configure what it
needs, so an agent never sees a tool that cannot work.
The UI is Persian-first and right-to-left; the code, tools and docs are English.
How it fits together
browser · Telegram · MCP client
│
┌──────▼─────────────────────────┐
│ app chats, agents, jobs, │ holds the model key
│ charts, files, MCP │ no infrastructure credentials, no shell
└──────┬─────────────────────────┘
│ unix socket · typed JSON tools (optional)
┌──────▼─────────────────────────┐
│ broker kube · metrics · pg │ holds every credential
│ s3 · gitlab · routers │ guards enforced in code
└────────────────────────────────┘ public API first, emergency SSH secondThe split is the point: the process running the model holds no credential and has no shell, and the process that holds them exposes only named tools with schemas. More in docs/architecture.md.
The second point is that it keeps working when what it is watching does not: every cluster tool tries the public API first and falls back to SSH on a node, and every answer says which path produced it.
Add your infrastructure (when you need it)
Copy
config/site.example.jsontoconfig/site.jsonand describe your world: clusters and their emergency SSH paths, GitLab, object storage, routers, shell hosts.Put the credentials in a vault (OpenBao/Vault KV) —
docs/configuration.mdlists the item names the broker looks up.Start the broker:
COMPOSE_PROFILES=tools docker compose -f deploy/compose.yaml up -d --build.In #/agents, switch the new tools on for the agent that should have them — or import
examples/agents/platform.jsonand edit it.
This repository ships no environment. There are no hosts, clusters, tokens or organisation knowledge in it: unconfigured tools say "not configured" instead of guessing an endpoint, and the tests declare their own fixture site.
Layout
Path | What |
| Hono + SQLite + SSE, agent runtime, auth, jobs, incidents, MCP |
| every credential, typed tools over a unix socket, guards in code |
| the UI (assistant-ui + streamdown, RTL, PWA) |
| folds stored events into messages (shared by server and UI) |
| the site inventory shape |
| importable agent profiles |
| compose, environment example, egress proxy notes, backup script |
| the terminal client |
|
Security posture
The agent process has no shell tool and no infrastructure credential; the broker holds them and never returns a secret value to the model.
Tool access is filtered per caller before the tools reach the model — quota is code, not prompt text — and a caller with no quota row gets nothing.
Write tools are narrow by construction: router changes only touch items Griffin itself created, S3 is GET/HEAD only,
gitlab_proposeopens a draft MR on a new branch and never merges, secret copies return key names only.Irreversible actions ask the owner and wait; in an unattended chain (a job, the ops room) they are refused rather than guessed. Every approval is recorded.
Owner auth is local: the token in
data/owner.tokenbecomes a signed cookie in the browser, or aBearercredential for the terminal and scripts. It keeps working when your SSO is down. Put it behind TLS you control; it is not built to face the open internet unauthenticated.
Read the code before you point this at production: it is opinionated, and the guards assume one owner.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).
- OctopadOAuthapp.octopad
The back-office workspace for your team's AIs: tasks, knowledge and context shared over MCP.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to communicate, coordinate, and collaborate on complex tasks through a local MCP server.3 npm8ISC
- AlicenseNot gradedqualityAmaintenanceEnables MCP-compatible clients to connect to Swarm, providing access to Space memory, work coordination, artifacts, evaluations, context packs, and agent execution tools.10 npmApache 2.0

ax-platform-mcpofficial
AlicenseNot gradedqualityCmaintenanceEnables agent-native collaboration network for long-running agents and MCP clients with shared context, tasks, and interactive MCP App widgets.6MIT- FlicenseNot gradedqualityCmaintenanceEnables agents to connect to remote MCP servers once, access their tools through a compact MCP endpoint, pair a CLI inside sandboxes, and create watches that turn command or tool output into pollable structured events.2-