The agent service
A model on one side, your data on the other, and a protocol in between so the model can ask for things instead of hallucinating them.
@atlas/ai is provider-agnostic — OpenAI, Anthropic, or a local Ollama behind the same calls, with streaming, embeddings, RAG, and conversations. @atlas/mcp exposes your own application over the Model Context Protocol: tools register from whatever you put in the context, so handing an agent your database is a line, not a project.
Two documentation tools are always on, with or without a context: docs.list and docs.read. An agent working in your repository can read Atlas's canonical documentation without a network round trip.
What you are carrying
@atlas/aiProviders, chat, streaming, embeddings, RAG, agents.
@atlas/mcpYour app as MCP tools, plus the docs tools.
@atlas/serverThe HTTP surface in front of it.
@atlas/cacheEmbeddings are not free twice.
Start it
atlas init -n mybot --template ai
What it looks like
import { createProvider } from "@atlas/ai"
import { collectTools, createContext, createMcpServer } from "@atlas/mcp"
const model = createProvider({ provider: "anthropic", key: process.env.ANTHROPIC_API_KEY! })
for await (const chunk of model.chatStream({
messages: [{ role: "user", content: "Summarise the last release" }],
})) {
if (chunk.type === "text") process.stdout.write(chunk.content ?? "")
}
// The same app, exposed to an agent. Tools register from what the context has.
const ctx = createContext({ db, routes, config })
createMcpServer(collectTools(ctx), ctx).start()