diff --git a/content/docs/ai.md b/content/docs/ai.md
index b6fee37c9..d21e678a1 100644
--- a/content/docs/ai.md
+++ b/content/docs/ai.md
@@ -17,6 +17,16 @@ The [Railway Agent](/ai/railway-agent) is a chat-based assistant built directly
[Get started with the Railway Agent →](/ai/railway-agent)
+### Context Sources
+
+[Context Sources](/ai/context-sources) connect Notion, Linear, Sentry, and your own MCP servers to Railway's agents. Attach a source to a chat from the Context picker, and the agent can use its tools while it works.
+
+- One-click connections for Notion, Linear, and Sentry, plus support for any custom MCP server
+- Works in both the Railway Agent and dev.new
+- Each connection is personal: it runs with the credentials of whichever member connected it
+
+[Get started with Context Sources →](/ai/context-sources)
+
### Agent integrations
[Agent integrations](/ai/agent-integrations) bring the Railway Agent into your team chat on Slack and Discord. Mention **@Railway** to inspect deployments, read logs, and make changes without leaving the conversation.
diff --git a/content/docs/ai/context-sources.md b/content/docs/ai/context-sources.md
new file mode 100644
index 000000000..f21641a66
--- /dev/null
+++ b/content/docs/ai/context-sources.md
@@ -0,0 +1,59 @@
+---
+title: Context Sources
+description: Connect Notion, Linear, Sentry, and your own MCP servers, then attach their tools to Railway Agent and dev.new chats from the Context picker.
+---
+
+Context Sources are available through Priority Boarding. Breaking changes may occur.
+
+Context Sources connect external tools to Railway's agents. Once you connect a source, attach it to a chat from the Context picker, and the agent can call its tools while it works.
+
+**Note:** This is the opposite direction from the [Railway MCP Server](/ai/mcp-server), which lets external AI tools like Cursor and Claude Code call into Railway. Context Sources let Railway's own agents call out to Notion, Linear, Sentry, and other MCP servers.
+
+## Where you can use it
+
+Context Sources attach to chats in two places:
+
+- **[Railway Agent](/ai/railway-agent)** — the chat assistant built into the Railway dashboard.
+- **dev.new** — Railway's AI app builder, where an agent scaffolds, previews, and deploys an app for you in a sandboxed environment.
+
+Both surfaces read from the same connections. Connect a source once in your workspace, and it's available to attach in either place.
+
+## Standard context sources
+
+Railway maintains one-click connections for commonly used tools:
+
+- Notion
+- Linear
+- Sentry
+
+Click **Connect** on any of these cards in your workspace's Agents settings, then authenticate through the provider's OAuth flow. Once connected, the source's tools are available to attach from the Context picker.
+
+## Custom MCP servers
+
+You can also register any remote MCP server that supports streamable HTTP, so agents can use the tools it exposes.
+
+To add a custom server:
+
+1. Navigate to your workspace's Agents settings.
+2. Under **Context Sources**, expand **Custom MCP Servers**.
+3. Enter a **Name** for the server. The name becomes part of the tool names the agent sees (`_`), so it must be 1-32 characters of lowercase letters, digits, hyphens, or underscores.
+4. Enter the server's **URL**. Railway adds `https://` if you omit a scheme, and only connects over HTTPS.
+5. Optional: Add headers, such as an `Authorization` token, if the server requires them.
+
+Railway tests the connection automatically after you add or edit a server, and shows the result, connected with a tool count, or an error, on the server's row. If the server supports OAuth instead of a static header, authenticate from the same row.
+
+You can register up to 20 custom servers per workspace member.
+
+## Attach context to a chat
+
+Available sources appear in the composer's Context picker, grouped by kind. A source attaches automatically the first time it becomes available in a session, and stays attached until you remove it from the picker.
+
+Only the sources you have attached are sent to the agent for that message. Removing a source stops the agent from using its tools from that point on, without affecting earlier messages.
+
+## Permissions and scope
+
+Connecting and managing context sources requires workspace admin access. Workspace admins can see every member's connected sources for oversight, by name and host, never credentials, and can remove a member's server.
+
+Every context source is personal: it runs with the credentials of whichever member connected it, and its tools are only ever available on that member's own chats. Connecting a source doesn't share it with the rest of the workspace.
+
+Header values (such as an `Authorization` token) are encrypted at rest and can't be read back through the dashboard or API after you save them.
diff --git a/content/docs/ai/railway-agent.md b/content/docs/ai/railway-agent.md
index edd5c6903..88202d0ca 100644
--- a/content/docs/ai/railway-agent.md
+++ b/content/docs/ai/railway-agent.md
@@ -20,6 +20,10 @@ When a deployment fails, the agent can automatically investigate. It reads the b
If the fix is in your code, the agent can open a pull request with the change so you can review and merge it.
+## Context Sources
+
+Connect Notion, Linear, Sentry, or your own MCP servers, then attach them to a chat from the Context picker so the agent can use their tools while it works. See [Context Sources](/ai/context-sources) for setup and details.
+
## Pricing
Usage of the Railway Agent is billed based on the underlying LLM tokens consumed, at the exact per-token rates published on anthropic.com/pricing, with no markup. See [Pricing](/pricing#railway-agent) for details.
diff --git a/src/data/sidebar.ts b/src/data/sidebar.ts
index 98812bc6d..6ee24f672 100644
--- a/src/data/sidebar.ts
+++ b/src/data/sidebar.ts
@@ -108,6 +108,7 @@ export const sidebarContent: ISidebarContent = [
slug: "/ai",
content: [
makePage("Railway Agent", "ai"),
+ makePage("Context Sources", "ai"),
{
subTitle: makePage("Agent integrations", undefined, "/ai/agent-integrations"),
pages: [
diff --git a/src/generated/page-urls.json b/src/generated/page-urls.json
index 15f852238..ddc756347 100644
--- a/src/generated/page-urls.json
+++ b/src/generated/page-urls.json
@@ -13,6 +13,7 @@
"/ai/claude-code-plugin",
"/ai/claude-connector",
"/ai/codex-plugin",
+ "/ai/context-sources",
"/ai/cursor-plugin",
"/ai/grok-build-plugin",
"/ai/mcp-server",