Nodepool Documentation
Everything you need to build, connect, and deploy conversational agents on the web — with ~900ms voice, RAG, and tools in minutes.
Early access. Nodepool is enterprise-only right now. Book a demo to get access within 48 h.
Get started
Platform features
Platform at a glance
| Concept | Description |
|---|---|
Agent | AI entity with prompt, knowledge, tools, and guardrails. Deployed as widget or API. |
Knowledge Base | Qdrant vector store seeded from your docs, sites, or APIs. Retrieved at inference. |
MCP Skill | Callable action — search, cart, CRM. Exposed via Model Context Protocol. |
Credit | 1 credit per text session. Voice is billed per minute. |
SSE Stream | Token-by-token responses over a persistent HTTP connection. |
Quick Start
Get a text agent live in under 5 minutes with the CLI.
1 · Install
# Install globally npm install -g @nodepool/cli # Authenticate nodepool auth login --key np_live_xxxxxxxxxxxxx
2 · Create agent
nodepool init my-agent
# Generates agent.yaml
3 · Configure agent.yaml
name: my-agent model: gemini-flash knowledge: - ./docs/ - https://yoursite.com/faq tools: - mcp://store/search context: language: en persona: Helpful support agent for Acme. guardrails: - Never discuss competitors
4 · Deploy
nodepool deploy --prod # ✓ 1,842 chunks indexed # ✓ Live at https://agent.nodepool.dev/a/my-agent
Agents
An agent combines a model, knowledge base, tools, and context into a single API endpoint and embeddable widget.
Lifecycle
- Draft — created, knowledge indexing may be in progress
- Active — indexed, serving requests, consuming credits
- Paused — live but not consuming credits. Resumes instantly
- Archived — soft-deleted, data retained 30 days
Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique ID — prefix agt_ |
name | string | Human-readable display name |
model | string | gemini-flash | gemini-pro |
knowledge_base_id | string | Attached KB — prefix kb_ |
tools | string[] | MCP skill URIs the agent can invoke |
context | object | Persona, language, guardrails, session vars |
status | enum | draft | active | paused | archived |
Knowledge Base
Knowledge bases are vector stores built from your content. Nodepool ingests, generates embeddings, and stores them in Qdrant. The most relevant chunks are retrieved at every inference.
Supported sources
- Files — PDF, DOCX, MD, TXT, CSV (up to 50 MB)
- URLs — crawled recursively up to 3 levels deep
- APIs — any REST endpoint returning JSON or HTML
- Sync — scheduled re-ingestion (hourly / daily / weekly)
nodepool kb ingest ./docs/ --kb-id kb_acme
nodepool kb ingest https://acme.com/faq --kb-id kb_acme
nodepool kb status kb_acme
# ✓ 3,204 chunks · last indexed 2 min ago
Tools & MCP Skills
Tools let agents take actions beyond answering questions. Nodepool exposes tools via the Model Context Protocol (MCP).
Built-in skills
| URI | Description |
|---|---|
mcp://store/search | Semantic product search over catalog |
mcp://store/cart | Add / remove / view cart items |
mcp://store/orders | Order lookup and status |
mcp://web/search | Live web search (grounded answers) |
mcp://crm/lookup | Customer record retrieval |
Agent Context
Context defines the agent's identity and behavioral limits. Injected as a system prompt prefix before every turn.
| Field | Type | Description |
|---|---|---|
persona | string | Who the agent is and how it speaks |
language | string | en | es | auto |
guardrails | string[] | Hard rules the agent must never violate |
fallback | string | Response when no KB match and no tool result |
session_vars | object | Dynamic per-session key/value pairs |
Authentication
All API calls require a bearer token. Keys are prefixed np_live_ for production, np_test_ for sandbox.
Authorization: Bearer np_live_xxxxxxxxxxxxx
- Rate limit: 300 req/min per key
- Rotate via dashboard or
nodepool auth rotate - Never share keys across tenants
/v1/agents/chat
/v1/agents/chatSend a message to an active agent. Returns SSE by default; pass stream: false for a single JSON response.
{
"agent_id": "agt_xxxx",
"message": "Do you have trail shoes in size 9?",
"session_id": "sess_123",
"stream": true,
"session_vars": { "user_name": "Ana" }
}
data: {"type":"delta","text":"Yes — here are two options:"}
data: {"type":"tool_call","tool":"mcp://store/search","result":[...]}
data: {"type":"done","usage":{"credits":1,"latency_ms":912}}
/v1/agents
/v1/agentsList all agents. Paginated, 20 per page.
/v1/agentsCreate a new agent. Triggers KB indexing if knowledge_base_id is set.
/v1/agents/:idRetrieve a single agent.
/v1/agents/:idArchive an agent. Data retained 30 days.
/v1/kb
/v1/kbCreate a knowledge base. Optionally pass sources to trigger immediate ingestion.
/v1/kb/:id/ingestAdd content. Accepts file upload (multipart/form-data) or URL array.
/v1/kb/:id/status{ "id": "kb_acme", "status": "ready", "chunks": 3204 }
Voice (~900ms)
Real-time voice in the browser with ~900ms end-to-end latency — speech-to-speech in a single unified pipeline.
- Browser captures audio via
getUserMedia - Audio streamed to Nodepool over WebSocket
- Transcribed, processed, and synthesized in one step
- Audio chunks stream back in real time
import { NodepoolVoice } from "@nodepool/sdk"; const voice = new NodepoolVoice({ agentId: "agt_xxxx", apiKey: "np_live_xxx" }); await voice.start(); voice.on("transcript", (text) => console.log("User:", text)); voice.on("reply", (text) => console.log("Agent:", text)); voice.on("latency", (ms) => console.log("RTT:", ms + "ms"));
Voice requires HTTPS. Browsers block getUserMedia on insecure origins.
SSE Streaming
Every /v1/agents/chat call with stream: true returns a text/event-stream response.
| Event type | Description |
|---|---|
delta | Incremental text token — append to current reply |
tool_call | Agent invoked an MCP skill — includes tool URI and result |
kb_hit | KB chunk retrieved — includes source and score |
done | Stream complete — includes usage (credits, latency_ms) |
error | Stream error — includes code and message |
Web Embed
One script tag on any HTML page. Supports text, voice, and search.
<script src="https://cdn.nodepool.dev/widget.js" data-agent="agt_xxxx" data-key="np_pub_xxx" data-mode="voice" async ></script>
Infrastructure
| Component | Technology | Role |
|---|---|---|
| Vector DB | Qdrant | Stores embeddings for all knowledge bases |
| Document DB | MongoDB | Agent configs, sessions, org data |
| Queue | Redis | Ingestion jobs, rate limit state |
| Streaming | SSE / WebSocket | Real-time text and voice |
| Observability | Prometheus + Grafana | Latency, credits, error rates |
Limits & Credits
One credit = one text conversation session. Voice is billed per minute. Overage billed at period end.
| Limit | Default | Enterprise |
|---|---|---|
| API requests / min | 300 | Custom |
| Concurrent voice sessions | 10 | Custom |
| KB file size | 50 MB | 500 MB |
| KB sources per agent | 25 | Unlimited |
| Custom MCP skills | 5 | Unlimited |
All limits are negotiable on enterprise plans. Book a demo.