Concepts
How Skilder Works
Understand the architecture of Skilder — how agents connect, how tools execute, and how data flows through the system.
Skilder is an MCP server that your AI agents connect to. It builds capabilities by bundling MCP tools with instructions and scripts into skills. When an agent calls a tool, Skilder authenticates the request, checks permissions, routes it to the right underlying MCP server, and returns the result.
System Overview
Components
| Component | Technology | What It Does |
|---|---|---|
| API | Fastify + Apollo GraphQL | Authentication, permission checks, skill resolution, tool routing |
| Database | Dgraph (graph DB) | Stores workspaces, skills, hats, MCP configs, and their relationships |
| Message Bus | NATS | Real-time communication between API, runtimes, and agents |
| Frontend | React + Vite + Tailwind | Management console for configuring everything |
| Runtime | Distributed Node.js | Runs MCP server processes and routes tool calls |
What Happens When an Agent Calls a Tool
Step by step
- Authentication — Agent sends API key. Skilder validates it and identifies the associated hat.
- Permission check — Skilder verifies the tool belongs to a skill in that hat.
- Server resolution — Looks up which MCP server provides the tool and where it runs.
- Message routing — Publishes the tool call to NATS, which routes it to the correct runtime.
- Execution — Runtime invokes the MCP server, which calls the external service.
- Response — Result flows back through NATS to the API and then to the agent.
Design Principles
- Protocol-first — Implements the Model Context Protocol standard. Any MCP-compatible server works out of the box.
- Graph-native — Relationships between workspaces, skills, hats, and servers are stored as a graph, making permission resolution fast and flexible.
- Event-driven — NATS decouples the API from runtime execution. This enables horizontal scaling and reliable message delivery.
- Real-time — WebSocket subscriptions keep the UI in sync with backend state. No polling needed.