Outline MCP server for AI agents

Live

OAUTH 2.0

KNOWLEDGE BASE

Productivity

Outline gives your agent your team knowledge base: search and read documents, create and update pages in collections, ask questions answered from your docs, and manage comments, shares, and access.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Outline
agent · Acme Q3
Run
What is our on-call escalation policy?
S
outline_documents_answer_question
142ms
Knowledge agent
Pages go to the primary on-call first, then to the secondary after 15 minutes. The policy lives in the Engineering collection.
Sources: Outline, 2 documents
outline
2 documents
18:29
Message Claude...

Tools your knowledge base agent reaches for on Outline, scoped per user.

CALL ANY TOOL
82 tools for your knowledge base in Outline: search, read, create, and update documents, organize collections, ask questions over your docs, and manage comments, shares, pins, and permissions.
outline_attachment_create_from_url
Attachment create from url
Store a file from a public URL as an Outline attachment. Outline downloads the file itself. Returns the attachment with its id, name, size and url, ready to use at once. Use outline_attachment_create_from_url to add an image or file to Outline; then reference its url in a document's Markdown with outline_document_update.
Parameters
Name
Type
Required
Description
url
string
Required
Public URL of the file to fetch. Example: https://example.com/diagram.png.
document_id
string
Optional
UUID of the document the attachment belongs to. Use the `id` field returned by outline_document_get or outline_documents_list (a UUID, not the short urlId).
outline_attachments_list
List attachments
outline_collection_archive
Archive collection
outline_collection_delete
Delete collection
outline_collection_duplicate
Duplicate collection
outline_collection_get
Get collection
outline_collection_group_add
Add collection group
outline_collection_group_remove
Remove collection group
outline_collection_memberships_list
List collection memberships
outline_collection_restore
Restore collection
outline_collection_update
Update collection
outline_comment_create
Create comment
outline_current_user_get
Get current user
outline_document_duplicate
Duplicate document
outline_document_group_memberships_list
List document group memberships
outline_document_move
Move document
outline_document_unpublish
Document unpublish
outline_document_update
Update document
outline_document_users_list
List document users
outline_documents_drafts_list
List documents drafts
outline_documents_search
Search documents
outline_events_list
List events
outline_file_operation_get
Get file operation
outline_group_memberships_list
List group memberships
outline_pin_delete
Delete pin
outline_pins_list
List pins
outline_share_create
Create share
outline_share_get
Get share
outline_shares_list
List shares
outline_templates_list
List templates

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Outline tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["outline"], toolNames: [
    "outline_documents_search",
    "outline_document_get",
    "outline_document_update"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find the Engineering Weekly doc and append today's standup notes" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["outline"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find the Engineering Weekly doc and append today's standup notes" }],
  tools,
});

// Execute the tool call with the user's vaulted Outline OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["outline"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find the Engineering Weekly doc and append today's standup notes" }],
  tools,
});

// Tool call runs with the user's vaulted Outline OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["outline"] }, pageSize: 100,
});

const agent = new Agent({
  name: "knowledge_agent",
  model: "gemini-2.5-pro",
  instruction: "Outline tools scoped to this user",
  tools,
});

await agent.run("Find the Engineering Weekly doc and append today's standup notes");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Outline tool. Click to copy, paste into your agent, done.
Find
Copy the prompt
Copied
Search our Outline docs for the incident postmortem template.
Copy the prompt
Copied
What does our handbook say about expense approvals?
Copy the prompt
Copied
List documents I viewed recently.
Write
Copy the prompt
Copied
Create a draft called Q4 Launch Plan in the Marketing collection.
Copy the prompt
Copied
Append today's standup notes to the Engineering Weekly doc.
Copy the prompt
Copied
Move the API Guidelines doc under the Engineering Handbook.
Collaborate
Copy the prompt
Copied
List comments on the Pricing FAQ.
Copy the prompt
Copied
Give the Support group access to the Help Center collection.
Copy the prompt
Copied
Create a share link for the Onboarding Guide.
SEE HOW AUTH WORKS
Each user signs in to Outline once, and Scalekit stores and refreshes their tokens. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Outline
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Outline
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Outline
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Outline
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other docs and knowledge connectors.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
Test other agents
See the same per-user auth pattern across other docs and knowledge connectors.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Outline token looks fine in a demo. In production every document edit looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Outline today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Outline as the user or through a shared service account?
As the user. Each user signs in to Outline once, and Scalekit stores and refreshes their tokens. Documents and comments the agent creates or edits are attributed to that user in your audit trail, not a shared service account.
Where is the Outline OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Outline?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the search and read tools without outline_collection_delete, which deletes a collection and every document in it and cannot be undone. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Outline access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent answer questions from Outline docs?
Yes, when AI answers are enabled for the Outline workspace. outline_documents_answer_question returns an AI-written answer drawn from the documents the user can access, and outline_documents_search returns the matching documents for a keyword search.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""outline"": {
""url"": ""https://mcp.scalekit.com/outline"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.outline]
url = ""https://mcp.scalekit.com/outline""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""outline"": {
""url"": ""https://mcp.scalekit.com/outline"",
""type"": ""http""
}
}
}