diff --git a/app/en/_meta.tsx b/app/en/_meta.tsx
index 691941933..51656a196 100644
--- a/app/en/_meta.tsx
+++ b/app/en/_meta.tsx
@@ -6,16 +6,19 @@ const meta: MetaRecord = {
copyPage: false,
},
},
+ // 1.0 Home Section
home: {
type: "page",
- title: "Home",
- href: "/get-started",
+ title: "Docs",
+ href: "/home",
},
+ // MCP Servers Section
"mcp-servers": {
type: "page",
- title: "MCP Servers",
+ title: "Integrations",
href: "/mcp-servers",
},
+ // API & SDKs Section
references: {
type: "page",
title: "API & SDKs",
diff --git a/app/en/home/_meta.tsx b/app/en/home/_meta.tsx
index ff7c4d069..33432148e 100644
--- a/app/en/home/_meta.tsx
+++ b/app/en/home/_meta.tsx
@@ -1,4 +1,4 @@
-import { BadgeHelp, Globe, HeartPulse, Home, Shield } from "lucide-react";
+import { Home } from "lucide-react";
import type { MetaRecord } from "nextra";
function TitleWithIcon({
@@ -17,11 +17,6 @@ function TitleWithIcon({
}
export const meta: MetaRecord = {
- "*": {
- theme: {
- copyPage: true,
- },
- },
index: {
title: Home,
theme: {
@@ -31,129 +26,98 @@ export const meta: MetaRecord = {
copyPage: false,
},
},
- arcade: {
- title: Arcade.dev,
- href: "https://arcade.dev",
- },
- "-- Getting Started": {
+ "-- Get Started": {
type: "separator",
- title: "Using Arcade",
- },
- quickstart: {
- title: "Hosted Tools Quickstart",
- },
- "custom-mcp-server-quickstart": {
- title: "Build MCP Server QuickStart",
- },
- "api-keys": {
- title: "Get an API key",
- },
- "-- Authoring Tools": {
+ title: "Get Started",
+ },
+ "about-arcade": "About Arcade",
+ setup: "Setup",
+ quickstarts: "Quickstarts",
+ "common-use-cases": "Common use cases",
+ "example-agents": "Example agents",
+ tools: "Tools",
+ glossary: "Glossary",
+ faq: "FAQ",
+ changelog: "Changelog",
+ "-- Guides": {
type: "separator",
- title: "Authoring Tools",
- },
- "build-tools": {
- title: "Build tools",
- },
- "evaluate-tools": {
- title: "Evaluate tools",
- },
- "serve-tools": {
- title: "Serve tools",
+ title: "Guides",
},
- "-- Agent Frameworks and MCP": {
+ "configure-arcade-section": "Configure Arcade",
+ "calling-tools": "Call tools",
+ "creating-tools": "Create tools",
+ "agent-frameworks": "Agent frameworks",
+ "sharing-with-end-users": "User-facing agents",
+ observability: "Observability",
+ "deployment-hosting": "Deployment and hosting",
+ "security-section": "Security and compliance",
+ "-- Learn": {
type: "separator",
- title: "Agent Frameworks and MCP",
- },
- "mcp-clients": {
- title: "MCP Clients",
- },
- langchain: {
- title: "LangChain",
- },
- crewai: {
- title: "CrewAI",
- },
- "google-adk": {
- title: "Google ADK",
- },
- mastra: {
- title: "Mastra",
+ title: "Learn",
},
- "oai-agents": {
- title: "OpenAI Agents",
- },
- vercelai: {
- title: "Vercel AI",
- },
- "-- Core Concepts": {
+ "what-is-agent": "What's an agent",
+ "auth-and-secrets": "How do auth and secrets work",
+ "agentic-architecture": "Agentic architectures & workflows",
+ "-- Reference": {
type: "separator",
- title: "Core Concepts",
- },
- "use-tools": {
- title: "Tool Calling",
- },
- auth: {
- title: "Authorization",
- },
- "mcp-gateways": {
- title: "MCP Gateways",
- },
- "arcade-cli": {
- title: "Arcade CLI",
+ title: "Reference",
+ },
+ api: "API",
+ "arcade-mcp": "Arcade MCP (MCP server SDK)",
+ "arcade-clients": "Arcade clients",
+ "arcade-cli": "Arcade CLI",
+ "auth-providers": "Auth Providers",
+ // Hide auto-discovered directories
+ "api-keys": {
+ display: "hidden",
},
- "-- Hosting options": {
- type: "separator",
- title: "Hosting options",
+ "contact-us": {
+ display: "hidden",
},
"hosting-overview": {
- title: "Overview",
- },
- deployment: {
- title: "Deployment",
+ display: "hidden",
},
- "auth-providers": {
- title: "Customizing Auth",
+ "mcp-clients": {
+ display: "hidden",
},
- "-- Guides": {
- type: "separator",
- title: "Guides",
+ "mcp-gateway-quickstart": {
+ display: "hidden",
},
- glossary: {
- title: "Glossary",
+ "python-quickstart": {
+ display: "hidden",
},
- faq: {
- title: "FAQ",
+ "registry-early-access": {
+ display: "hidden",
},
- "compare-server-types": {
- title: "Compare Server Types",
+ "sample-agents": {
+ display: "hidden",
},
- "agentic-development": {
- title: "Agentic Development",
+ "tool-calling-intro": {
+ display: "hidden",
},
- changelog: {
- title: "Changelog",
+ guides: {
+ display: "hidden",
},
- "-- Registry": {
- type: "separator",
- title: "Registry",
+ "add-external-mcp": {
+ display: "hidden",
},
- "registry-early-access": {
- title: "Registry Early Access",
+ "build-custom-mcp": {
+ display: "hidden",
},
- "-- Resources": {
- type: "separator",
- title: "Resources",
+ concepts: {
+ display: "hidden",
},
- "contact-us": {
- title: Contact us,
+ examples: {
+ display: "hidden",
},
security: {
- title: Security,
+ display: "hidden",
+ },
+ "turn-api-to-mcp": {
+ display: "hidden",
},
- status: {
- title: Status,
- href: "https://status.arcade.dev/",
+ "why-agents-call-tools": {
+ display: "hidden",
},
};
diff --git a/app/en/home/auth/how-arcade-helps/page.mdx b/app/en/home/about-arcade/page.mdx
similarity index 99%
rename from app/en/home/auth/how-arcade-helps/page.mdx
rename to app/en/home/about-arcade/page.mdx
index d6d63cd69..3dcc757f9 100644
--- a/app/en/home/auth/how-arcade-helps/page.mdx
+++ b/app/en/home/about-arcade/page.mdx
@@ -75,4 +75,4 @@ console.log(response.output.value);
````
-
+
\ No newline at end of file
diff --git a/app/en/home/add-external-mcp/page.mdx b/app/en/home/add-external-mcp/page.mdx
new file mode 100644
index 000000000..265b51036
--- /dev/null
+++ b/app/en/home/add-external-mcp/page.mdx
@@ -0,0 +1,3 @@
+# Add external MCP Servers to Arcade
+
+Learn how to integrate external MCP servers with Arcade.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/_meta.tsx b/app/en/home/agent-frameworks/_meta.tsx
new file mode 100644
index 000000000..135490cfc
--- /dev/null
+++ b/app/en/home/agent-frameworks/_meta.tsx
@@ -0,0 +1,10 @@
+export default {
+ vanilla: "Vanilla",
+ langchain: "LangGraph",
+ "oai-agents": "OpenAI agents",
+ crewai: "CrewAI",
+ "open-agents": "OpenAgents",
+ "google-adk": "Google ADK",
+ mastra: "Mastra",
+ vercelai: "Vercel AI",
+};
diff --git a/app/en/home/crewai/_meta.tsx b/app/en/home/agent-frameworks/crewai/_meta.tsx
similarity index 67%
rename from app/en/home/crewai/_meta.tsx
rename to app/en/home/agent-frameworks/crewai/_meta.tsx
index 67edee61a..dbd7072e4 100644
--- a/app/en/home/crewai/_meta.tsx
+++ b/app/en/home/agent-frameworks/crewai/_meta.tsx
@@ -8,8 +8,11 @@ const meta: MetaRecord = {
copyPage: true,
},
},
- "use-arcade-tools": {
- title: "Using Arcade tools",
+ "set-up-python": {
+ title: "Set up with Python",
+ },
+ "set-up-typescript": {
+ title: "Set up with TypeScript",
},
"custom-auth-flow": {
title: "Custom auth flow",
diff --git a/app/en/home/crewai/custom-auth-flow/page.mdx b/app/en/home/agent-frameworks/crewai/custom-auth-flow/page.mdx
similarity index 100%
rename from app/en/home/crewai/custom-auth-flow/page.mdx
rename to app/en/home/agent-frameworks/crewai/custom-auth-flow/page.mdx
diff --git a/app/en/home/agent-frameworks/crewai/set-up-python/page.mdx b/app/en/home/agent-frameworks/crewai/set-up-python/page.mdx
new file mode 100644
index 000000000..36c828fb4
--- /dev/null
+++ b/app/en/home/agent-frameworks/crewai/set-up-python/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with CrewAI (Python)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using CrewAI with Python.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/crewai/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/crewai/set-up-typescript/page.mdx
new file mode 100644
index 000000000..77ac2dd21
--- /dev/null
+++ b/app/en/home/agent-frameworks/crewai/set-up-typescript/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with CrewAI (TypeScript)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using CrewAI with TypeScript.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/google-adk/_meta.tsx b/app/en/home/agent-frameworks/google-adk/_meta.tsx
new file mode 100644
index 000000000..240f3ecab
--- /dev/null
+++ b/app/en/home/agent-frameworks/google-adk/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "set-up-python": "Set up with Python",
+ "set-up-typescript": "Set up with TypeScript",
+};
diff --git a/app/en/home/google-adk/use-arcade-tools/page.mdx b/app/en/home/agent-frameworks/google-adk/set-up-python/page.mdx
similarity index 99%
rename from app/en/home/google-adk/use-arcade-tools/page.mdx
rename to app/en/home/agent-frameworks/google-adk/set-up-python/page.mdx
index 6bede0d04..dd73b04c8 100644
--- a/app/en/home/google-adk/use-arcade-tools/page.mdx
+++ b/app/en/home/agent-frameworks/google-adk/set-up-python/page.mdx
@@ -219,4 +219,4 @@ Now that you have integrated Arcade tools into your Google ADK application, you
- Try out multi-agent systems using different Arcade tools
- Build your own custom tools with the Arcade Tool SDK
-Enjoy exploring Arcade and building powerful AI-enabled Python applications!
+Enjoy exploring Arcade and building powerful AI-enabled Python applications!
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/google-adk/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/google-adk/set-up-typescript/page.mdx
new file mode 100644
index 000000000..5c447910c
--- /dev/null
+++ b/app/en/home/agent-frameworks/google-adk/set-up-typescript/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with Google ADK (TypeScript)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using Google ADK with TypeScript.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/langchain/_meta.tsx b/app/en/home/agent-frameworks/langchain/_meta.tsx
new file mode 100644
index 000000000..a97176806
--- /dev/null
+++ b/app/en/home/agent-frameworks/langchain/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ "set-up-python": "Set up with Python",
+ "set-up-typescript": "Set up with TypeScript",
+ "using-langgraph-tools": "Using LangGraph tools",
+};
diff --git a/app/en/home/agent-frameworks/langchain/set-up-python/page.mdx b/app/en/home/agent-frameworks/langchain/set-up-python/page.mdx
new file mode 100644
index 000000000..5402b5807
--- /dev/null
+++ b/app/en/home/agent-frameworks/langchain/set-up-python/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up Arcade with LangChain (Python)"
+description: "Get started with LangChain using Python"
+---
+
+# Set up Arcade with LangChain (Python)
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/langchain/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/langchain/set-up-typescript/page.mdx
new file mode 100644
index 000000000..ed5193fc2
--- /dev/null
+++ b/app/en/home/agent-frameworks/langchain/set-up-typescript/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up Arcade with LangChain (TypeScript)"
+description: "Get started with LangChain using TypeScript"
+---
+
+# Set up Arcade with LangChain (TypeScript)
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/langchain/auth-langchain-tools/page.mdx b/app/en/home/agent-frameworks/langchain/using-langgraph-tools/page.mdx
similarity index 99%
rename from app/en/home/langchain/auth-langchain-tools/page.mdx
rename to app/en/home/agent-frameworks/langchain/using-langgraph-tools/page.mdx
index 5107888db..73522f6bb 100644
--- a/app/en/home/langchain/auth-langchain-tools/page.mdx
+++ b/app/en/home/agent-frameworks/langchain/using-langgraph-tools/page.mdx
@@ -219,4 +219,4 @@ for await (const event of events) {
### Next Steps
-Now you're ready to explore more LangChain tools with Arcade. Try integrating additional MCP Servers and crafting more complex queries to enhance your AI workflows.
+Now you're ready to explore more LangChain tools with Arcade. Try integrating additional MCP Servers and crafting more complex queries to enhance your AI workflows.
\ No newline at end of file
diff --git a/app/en/home/mastra/_meta.tsx b/app/en/home/agent-frameworks/mastra/_meta.tsx
similarity index 53%
rename from app/en/home/mastra/_meta.tsx
rename to app/en/home/agent-frameworks/mastra/_meta.tsx
index 9c7bbf1eb..e7080901f 100644
--- a/app/en/home/mastra/_meta.tsx
+++ b/app/en/home/agent-frameworks/mastra/_meta.tsx
@@ -8,14 +8,8 @@ const meta: MetaRecord = {
copyPage: true,
},
},
- overview: {
- title: "Overview",
- },
- "use-arcade-tools": {
- title: "Using Arcade tools",
- },
- "user-auth-interrupts": {
- title: "Managing user authorization",
+ "set-up-typescript": {
+ title: "Set up with TypeScript",
},
};
diff --git a/app/en/home/agent-frameworks/mastra/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/mastra/set-up-typescript/page.mdx
new file mode 100644
index 000000000..b096eaf45
--- /dev/null
+++ b/app/en/home/agent-frameworks/mastra/set-up-typescript/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with Mastra (TypeScript)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using Mastra with TypeScript.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/oai-agents/_meta.tsx b/app/en/home/agent-frameworks/oai-agents/_meta.tsx
new file mode 100644
index 000000000..240f3ecab
--- /dev/null
+++ b/app/en/home/agent-frameworks/oai-agents/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "set-up-python": "Set up with Python",
+ "set-up-typescript": "Set up with TypeScript",
+};
diff --git a/app/en/home/agent-frameworks/oai-agents/set-up-python/page.mdx b/app/en/home/agent-frameworks/oai-agents/set-up-python/page.mdx
new file mode 100644
index 000000000..fc2ecf0fd
--- /dev/null
+++ b/app/en/home/agent-frameworks/oai-agents/set-up-python/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with OpenAI Agents (Python)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using OpenAI Agents with Python.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/oai-agents/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/oai-agents/set-up-typescript/page.mdx
new file mode 100644
index 000000000..0565e83ce
--- /dev/null
+++ b/app/en/home/agent-frameworks/oai-agents/set-up-typescript/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with OpenAI Agents (TypeScript)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using OpenAI Agents with TypeScript.
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/open-agents/_meta.tsx b/app/en/home/agent-frameworks/open-agents/_meta.tsx
new file mode 100644
index 000000000..5204ccd77
--- /dev/null
+++ b/app/en/home/agent-frameworks/open-agents/_meta.tsx
@@ -0,0 +1,3 @@
+export default {
+ "set-up-python": "Set up with Python",
+};
diff --git a/app/en/home/agent-frameworks/open-agents/set-up-python/page.mdx b/app/en/home/agent-frameworks/open-agents/set-up-python/page.mdx
new file mode 100644
index 000000000..adb77811a
--- /dev/null
+++ b/app/en/home/agent-frameworks/open-agents/set-up-python/page.mdx
@@ -0,0 +1,7 @@
+# Set up Arcade with OpenAgents (Python)
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about using OpenAgents with Python.
diff --git a/app/en/home/agent-frameworks/vanilla/_meta.tsx b/app/en/home/agent-frameworks/vanilla/_meta.tsx
new file mode 100644
index 000000000..240f3ecab
--- /dev/null
+++ b/app/en/home/agent-frameworks/vanilla/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "set-up-python": "Set up with Python",
+ "set-up-typescript": "Set up with TypeScript",
+};
diff --git a/app/en/home/agent-frameworks/vanilla/set-up-python/page.mdx b/app/en/home/agent-frameworks/vanilla/set-up-python/page.mdx
new file mode 100644
index 000000000..2cd4ec0d4
--- /dev/null
+++ b/app/en/home/agent-frameworks/vanilla/set-up-python/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up Arcade with Vanilla Python"
+description: "Get started with building vanilla Python agents using Arcade"
+---
+
+# Set up Arcade with Vanilla Python
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/vanilla/set-up-typescript/page.mdx b/app/en/home/agent-frameworks/vanilla/set-up-typescript/page.mdx
new file mode 100644
index 000000000..eb587c6ed
--- /dev/null
+++ b/app/en/home/agent-frameworks/vanilla/set-up-typescript/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up Arcade with Vanilla TypeScript"
+description: "Get started with building vanilla TypeScript agents using Arcade"
+---
+
+# Set up Arcade with Vanilla TypeScript
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/agent-frameworks/vercelai/_meta.tsx b/app/en/home/agent-frameworks/vercelai/_meta.tsx
new file mode 100644
index 000000000..a9c62805f
--- /dev/null
+++ b/app/en/home/agent-frameworks/vercelai/_meta.tsx
@@ -0,0 +1,3 @@
+export default {
+ "set-up-typescript": "Set up with TypeScript",
+};
diff --git a/app/en/home/vercelai/using-arcade-tools/page.mdx b/app/en/home/agent-frameworks/vercelai/set-up-typescript/page.mdx
similarity index 99%
rename from app/en/home/vercelai/using-arcade-tools/page.mdx
rename to app/en/home/agent-frameworks/vercelai/set-up-typescript/page.mdx
index 5471ee846..3aadc6c3d 100644
--- a/app/en/home/vercelai/using-arcade-tools/page.mdx
+++ b/app/en/home/agent-frameworks/vercelai/set-up-typescript/page.mdx
@@ -151,4 +151,4 @@ You just need to change the MCP Server parameter in the `list` method. For examp
const slackToolkit = await arcade.tools.list({ toolkit: "Slack", limit: 30 });
```
-Browse our [complete MCP Server catalog](/mcp-servers) to see all available MCP Servers and their capabilities. Each MCP Server comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and MCP Servers - learn more [here](/home/build-tools/create-a-mcp-server).
+Browse our [complete MCP Server catalog](/mcp-servers) to see all available MCP Servers and their capabilities. Each MCP Server comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and MCP Servers - learn more [here](/home/build-tools/create-a-mcp-server).
\ No newline at end of file
diff --git a/app/en/home/agentic-architecture/_meta.tsx b/app/en/home/agentic-architecture/_meta.tsx
new file mode 100644
index 000000000..996c7ffd3
--- /dev/null
+++ b/app/en/home/agentic-architecture/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "kinds-of-agents": "Kinds of agents",
+ "architecture-patterns": "Architecture Patterns",
+};
diff --git a/app/en/home/agentic-architecture/architecture-patterns/_meta.tsx b/app/en/home/agentic-architecture/architecture-patterns/_meta.tsx
new file mode 100644
index 000000000..ce3462a52
--- /dev/null
+++ b/app/en/home/agentic-architecture/architecture-patterns/_meta.tsx
@@ -0,0 +1,3 @@
+export default {
+ "supervisor-architecture": "Supervisor architecture",
+};
diff --git a/app/en/home/agentic-architecture/architecture-patterns/supervisor-architecture/page.mdx b/app/en/home/agentic-architecture/architecture-patterns/supervisor-architecture/page.mdx
new file mode 100644
index 000000000..b3967a4bb
--- /dev/null
+++ b/app/en/home/agentic-architecture/architecture-patterns/supervisor-architecture/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Supervisor architecture"
+description: "Learn about supervisor architecture patterns"
+---
+
+# Supervisor architecture
+
+Coming soon!
diff --git a/app/en/home/agentic-architecture/kinds-of-agents/_meta.tsx b/app/en/home/agentic-architecture/kinds-of-agents/_meta.tsx
new file mode 100644
index 000000000..cdd141983
--- /dev/null
+++ b/app/en/home/agentic-architecture/kinds-of-agents/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "background-agents": "Background agents + secrets",
+ "agent-apps": "Agent apps + auth",
+};
diff --git a/app/en/home/agentic-architecture/kinds-of-agents/agent-apps/page.mdx b/app/en/home/agentic-architecture/kinds-of-agents/agent-apps/page.mdx
new file mode 100644
index 000000000..526c40a3a
--- /dev/null
+++ b/app/en/home/agentic-architecture/kinds-of-agents/agent-apps/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Agent apps + auth"
+description: "Learn about agent apps with authentication"
+---
+
+# Agent apps + auth
+
+Coming soon!
diff --git a/app/en/home/agentic-architecture/kinds-of-agents/background-agents/page.mdx b/app/en/home/agentic-architecture/kinds-of-agents/background-agents/page.mdx
new file mode 100644
index 000000000..9952fba8f
--- /dev/null
+++ b/app/en/home/agentic-architecture/kinds-of-agents/background-agents/page.mdx
@@ -0,0 +1,3 @@
+# Background Agents
+
+Coming soon.
diff --git a/app/en/home/api/page.mdx b/app/en/home/api/page.mdx
new file mode 100644
index 000000000..0336b606d
--- /dev/null
+++ b/app/en/home/api/page.mdx
@@ -0,0 +1,137 @@
+---
+title: "API Reference"
+description: "Complete reference documentation for Arcade's APIs and SDKs"
+---
+
+import { Button } from "@arcadeai/design-system";
+import Link from "next/link";
+
+# API Reference
+
+Complete reference documentation for Arcade's APIs and SDKs.
+
+
+ {/* Engine API Section */}
+
+
+ API
+
+
+ Arcade's REST API is for orchestrating tools, managing
+ authentication, and controlling agent workflows at runtime. Use
+ this API to integrate Arcade's tool execution and permission
+ management into your agent applications.
+
+
+
+
+
+
+ {/* MCP Server SDK Section */}
+
+
+ Arcade MCP (MCP Server SDK)
+
+
+ Arcade MCP, the secure framework for building MCP servers,
+ provides a FastAPI-like interface for creating custom tools and
+ exposing them through the standardized MCP protocol.
+
+
+
+
+
+
+ {/* Arcade Clients Section */}
+
+
+ Arcade Clients
+
+
+ Arcade provides clients for several languages. These clients make
+ it easy to use Arcade's tools within your agents and applications.
+
+ Note: MCP-compatible versions of these clients are in development
+ and will be documented soon.
+
+
+
diff --git a/app/en/home/arcade-cli/page.mdx b/app/en/home/arcade-cli/page.mdx
index 094c3bebf..2764fc086 100644
--- a/app/en/home/arcade-cli/page.mdx
+++ b/app/en/home/arcade-cli/page.mdx
@@ -410,4 +410,4 @@ Usage: arcade secret [OPTIONS] COMMAND [ARGS]...
│ list List all tool secrets in Arcade Cloud │
│ unset Delete tool secret(s) by key names │
╰────────────────────────────────────────────────────────────────────────────────────╯
-```
+```
\ No newline at end of file
diff --git a/app/en/home/arcade-clients/_meta.tsx b/app/en/home/arcade-clients/_meta.tsx
new file mode 100644
index 000000000..ad5938d7d
--- /dev/null
+++ b/app/en/home/arcade-clients/_meta.tsx
@@ -0,0 +1,6 @@
+export default {
+ "python-client": "Python client",
+ "javascript-typescript-client": "JavaScript / TypeScript client",
+ "go-client": "Go client",
+ "java-client": "Java client",
+};
diff --git a/app/en/home/arcade-clients/go-client/page.mdx b/app/en/home/arcade-clients/go-client/page.mdx
new file mode 100644
index 000000000..c1086d6cd
--- /dev/null
+++ b/app/en/home/arcade-clients/go-client/page.mdx
@@ -0,0 +1,3 @@
+# Go Client
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/arcade-clients/java-client/page.mdx b/app/en/home/arcade-clients/java-client/page.mdx
new file mode 100644
index 000000000..79548c9b6
--- /dev/null
+++ b/app/en/home/arcade-clients/java-client/page.mdx
@@ -0,0 +1,3 @@
+# Java Client
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/arcade-clients/javascript-typescript-client/page.mdx b/app/en/home/arcade-clients/javascript-typescript-client/page.mdx
new file mode 100644
index 000000000..586070099
--- /dev/null
+++ b/app/en/home/arcade-clients/javascript-typescript-client/page.mdx
@@ -0,0 +1,3 @@
+# JavaScript / TypeScript Client
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/arcade-clients/python-client/page.mdx b/app/en/home/arcade-clients/python-client/page.mdx
new file mode 100644
index 000000000..34d0231d3
--- /dev/null
+++ b/app/en/home/arcade-clients/python-client/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Python Client"
+description: "Arcade's Python client library for building agents"
+---
+
+# Python Client
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/arcade-mcp/page.mdx b/app/en/home/arcade-mcp/page.mdx
new file mode 100644
index 000000000..c5a8d7ea7
--- /dev/null
+++ b/app/en/home/arcade-mcp/page.mdx
@@ -0,0 +1,3 @@
+# Arcade MCP
+
+Coming soon.
diff --git a/app/en/home/auth-and-secrets/page.mdx b/app/en/home/auth-and-secrets/page.mdx
new file mode 100644
index 000000000..408e68b93
--- /dev/null
+++ b/app/en/home/auth-and-secrets/page.mdx
@@ -0,0 +1,3 @@
+# How do auth and secrets work?
+
+Coming soon.
diff --git a/app/en/home/auth/_meta.tsx b/app/en/home/auth/_meta.tsx
deleted file mode 100644
index 025a383e3..000000000
--- a/app/en/home/auth/_meta.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
- "how-arcade-helps": "How Arcade Helps",
- "auth-tool-calling": "Authorized Tool Calling",
- "tool-auth-status": "Checking Authorization Status",
- "call-third-party-apis-directly": "Direct Third-Party API Call",
- "secure-auth-production": "Secure Auth in Production",
-};
diff --git a/app/en/home/auth/how-arcade-helps.mdx b/app/en/home/auth/how-arcade-helps.mdx
deleted file mode 100644
index 12ea2984f..000000000
--- a/app/en/home/auth/how-arcade-helps.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: "How Arcade helps"
-description: "Learn how Arcade helps with auth and tool calling"
----
-
-import { Tabs } from "nextra/components";
-
-# How Arcade helps with Agent Authorization
-
-### The challenges that Arcade solves
-
-Applications that use models to perform tasks (_agentic applications_) commonly require access to sensitive data and services. Authentication complexities often hinder AI from performing tasks that require user-specific information, like what emails you recently received or what's coming up on your calendar.
-
-To retrieve this information, agentic applications need to be able to authenticate and authorize access to external services you use like Gmail or Google Calendar.
-
-Authenticating to retrieve information, however, is not the only challenge. Agentic applications also need to authenticate in order to **act** on your behalf - like sending an email or updating your calendar.
-
-Without auth, AI agents are severely limited in what they can do.
-
-### How Arcade solves this
-
-Arcade provides an authorization system that handles OAuth 2.0, API keys, and user tokens needed by AI agents to access external services through tools. This means your AI agents can now act on behalf of users securely and privately.
-
-With Arcade, developers can now create agents that can _act as the end users of their application_ to perform tasks like:
-
-- Creating a new Zoom meeting
-- Sending or reading email
-- Answering questions about files in Google Drive.
-
-### Auth permissions and scopes
-
-Each tool in Arcade's MCP Servers has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](/mcp-servers/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope.
-
-A scope is what the user has authorized someone else (in this case, the AI agent) to do on their behalf. In any OAuth2-compatible service, each kind of action requires a different set of permissions. This gives the user fine-grained control over what data third-party services can access and what actions can be executed in their accounts.
-
-When a tool is called, the Arcade Engine will check if the user has granted the required permissions. If not, it will automatically prompt the user to authorize the tool, coordinating the OAuth2 flow with the service provider.
-
-### How to implement OAuth2-authorized tool calling
-
-To learn how Arcade allows for actions (tools) to be authorized through OAuth2 and how to implement it, check out [Authorized Tool Calling](/home/auth/auth-tool-calling).
-
-### Tools that don't require authorization
-
-Some tools, like [`GoogleSearch.Search`](/mcp-servers/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization.
-
-
-
-```python
-from arcadepy import Arcade
-
-client = Arcade(api_key="arcade_api_key") # or set the ARCADE_API_KEY env var
-
-# Use the GoogleSearch.Searchtool to perform a web search
-
-response = await client.tools.execute(
-tool_name="GoogleSearch.Search",
-input={"query": "Latest AI advancements"},
-)
-print(response.output.value)
-
-````
-
-
-```javascript
-import { Arcade } from "@arcadeai/arcadejs";
-
-const client = new Arcade(api_key="arcade_api_key"); // or set the ARCADE_API_KEY env var
-
-// Use the GoogleSearch.Search tool to perform a web search
-const response = await client.tools.execute({
- tool_name: "GoogleSearch.Search",
- input: { query: "Latest AI advancements" },
-});
-console.log(response.output.value);
-````
-
-
-
diff --git a/app/en/home/auth/secure-auth-production/page.mdx b/app/en/home/auth/secure-auth-production/page.mdx
deleted file mode 100644
index cf7f07789..000000000
--- a/app/en/home/auth/secure-auth-production/page.mdx
+++ /dev/null
@@ -1,219 +0,0 @@
----
-title: "Secure Auth in Production"
-description: "How to secure and brand your auth flows in production"
----
-
-# Secure and Brand the Auth Flow in Production
-
-To keep your users safe, Arcade.dev performs a user verification check when a tool is authorized for the first time. This check verifies that the user who is authorizing the tool is the same user who started the authorization flow, which helps prevent phishing attacks.
-
-There are two ways to secure your auth flows with Arcade.dev:
-- Use the **Arcade user verifier** for development (enabled by default)
-- Implement a **custom user verifier** for production
-
-This setting is configured in the [Auth > Settings section](https://api.arcade.dev/dashboard/auth/settings) of the Arcade Dashboard.
-
-
-## Use the Arcade user verifier
-
-If you're building a proof-of-concept app or a solo project, use the Arcade user verifier. This option requires no custom development and is on by default when you create a new Arcade.dev account.
-
-This setting is configured in the [Auth > Settings section](https://api.arcade.dev/dashboard/auth/settings) of the Arcade Dashboard:
-
-
-
-When you authorize a tool, you'll be prompted to sign in to your Arcade.dev account. If you are already signed in (to the Arcade Dashboard, for example), this verification will succeed silently.
-
-The Arcade.dev user verifier helps keep your auth flows secure while you are building and testing your agent or app. When you're ready to share your work with others, implement a [custom user verifier](#build-a-custom-user-verifier) so your users don't need to sign in to Arcade.dev.
-
-
- Arcade's default OAuth apps can *only* be used with the Arcade user verifier.
- If you are building a multi-user production app, you must obtain your own OAuth app credentials and add them to Arcade.
- For example, see our docs on [configuring Google auth in the Arcade Dashboard](/home/auth-providers/google#access-the-arcade-dashboard).
-
-
-## Build a custom user verifier
-
-In a production application or agent, end-users are verified by your code, not Arcade.dev. This allows you to fully control the user experience of the auth flow. To enable this, build a custom verifier route and add the URL to the Arcade Dashboard.
-
-When your users authorize a tool, Arcade.dev will redirect the user's browser to your verifier route with some information in the query string. Your custom verifier route must send a response back to Arcade.dev to confirm the user's ID.
-
-If you need help, join the [Implementing a custom user verifier](https://github.com/ArcadeAI/arcade-ai/discussions/486) GitHub discussion and we'll be happy to assist.
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-
-
-### Build a new route
-
-Create a public route in your app or API that can accept a browser redirect (HTTP 303) from Arcade.dev after a user has authorized a tool.
-
-The route must gather the following information:
-
-- The `flow_id` from the current URL's query string
-- The unique ID of the user currently signed in, commonly an ID from your application's database, an email address, or similar.
-
-How the user's unique ID is retrieved varies depending on how your app is built, but it is typically retrieved from a session cookie or other secure storage. It **must** match the user ID that your code specified at the start of the authorization flow.
-
-
-### Verify the user's identity
-
-Use the Arcade SDK (or our REST API) to verify the user's identity.
-
-
- Because this request uses your Arcade API key, it *must not* be made from the client side (a browser or desktop app). This code must be run on a server.
-
-
-
-
-```ts {13-16}
-import { Arcade } from '@arcadeai/arcadejs';
-
-const client = new Arcade(); // Looks for process.env.ARCADE_API_KEY by default
-
-// Within a server GET handler:
-// Validate required parameters
-if (!flow_id) {
- throw new Error('Missing required parameters: flow_id');
-}
-
-// Confirm the user's identity
-try {
- const result = await client.auth.confirmUser({
- flow_id: flow_id as string,
- user_id: user_id_from_your_app_session, // Replace with the user's ID
- });
-} catch (error) {
- console.error('Error during verification', 'status code:', error.status, 'data:', error.data);
- throw error;
-}
-```
-
-
-```python {12-15}
-from arcadepy import AsyncArcade
-
-client = AsyncArcade() # Looks for ARCADE_API_KEY environment variable by default
-
-# Within a server GET handler:
-# Validate required parameters
-if not flow_id:
- raise Exception("Missing required parameters: flow_id")
-
-# Confirm the user's identity
-try:
- result = await client.auth.confirm_user(
- flow_id=flow_id,
- user_id=user_id_from_your_app_session, # Replace with the user's ID
- )
-except Exception as error:
- print("Error during verification:", error)
- raise Exception("Failed to verify the request")
-```
-
-
-```text
-POST https://cloud.arcade.dev/api/v1/oauth/confirm_user
-Authorization: Bearer
-Content-Type: application/json
-
-{
- "flow_id": "",
- "user_id": ""
-}
-```
-
-
-
-**Valid Response**
-
-If the user's ID matches the ID specified at the start of the authorization flow, the response will contain some information about the auth flow. You can either:
-
-- Redirect the user's browser to Arcade's `next_uri`
-- Redirect to a different route in your application
-- Look up the auth flow's status in the Arcade API and render a success page
-
-
-
-
-```ts
-// Either redirect to result.next_uri, or render a success page:
-const authResponse = await client.auth.waitForCompletion(result.auth_id);
-
-if (authResponse.status === "completed") {
- return "Thanks for authorizing!";
-} else {
- return "Something went wrong. Please try again.";
-}
-```
-
-
-```python
-# Either redirect to result.next_uri, or render a success page:
-auth_response = await client.auth.wait_for_completion(result.auth_id)
-
-if auth_response.status == "completed":
- return "Thanks for authorizing!"
-else:
- return "Something went wrong. Please try again."
-```
-
-
-```text
-HTTP 200 OK
-Content-Type: application/json
-
-{
- // Can be used to look up the auth flow's status in the Arcade API
- "auth_id": "ac_2zKml...",
-
- // Optional: URL to redirect the user to after the authorization flow is complete
- "next_uri": "https://..."
-}
-```
-
-
-
-
-**Invalid Response**
-
-If the user's ID does not match the ID specified at the start of the authorization flow, the response will contain an error.
-
-
-
-```ts
-console.error('Error during verification', 'status code:', error.status, 'data:', error.data);
-throw error;
-```
-
-
-```python
-print("Error during verification:", error)
-raise Exception("Failed to verify the request")
-```
-
-
-```text
-HTTP 400 Bad Request
-Content-Type: application/json
-
-{
- "code": 400,
- "msg": "An error occurred during verification"
-}
-```
-
-
-
-### Add your custom verifier route to Arcade
-
-In the [Auth > Settings section](https://api.arcade.dev/dashboard/auth/settings) of the Arcade Dashboard, pick the **Custom verifier** option and add the URL of your verifier route.
-
-
-
-
- Arcade's default OAuth apps *only* support the Arcade user verifier.
- Authorization flows using Arcade's default OAuth apps will use the Arcade user verifier even if you have a custom verifier route set up.
-
-
-
diff --git a/app/en/home/build-custom-mcp/page.mdx b/app/en/home/build-custom-mcp/page.mdx
new file mode 100644
index 000000000..9de711c26
--- /dev/null
+++ b/app/en/home/build-custom-mcp/page.mdx
@@ -0,0 +1,3 @@
+# Build a custom MCP Server
+
+Create custom MCP servers that you or others can use in agents.
\ No newline at end of file
diff --git a/app/en/home/build-tools/_meta.tsx b/app/en/home/build-tools/_meta.tsx
deleted file mode 100644
index 88373013a..000000000
--- a/app/en/home/build-tools/_meta.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-export default {
- "create-a-mcp-server": "Create an MCP Server",
- "create-a-tool-with-auth": "Create a tool with auth",
- "create-a-tool-with-secrets": "Create a tool with secrets",
- "tool-context": "Tools and Context",
- "organize-mcp-server-tools": "Organize MCP server tools",
- "providing-useful-tool-errors": "Providing useful tool errors",
- "retry-tools-with-improved-prompt": "Retry tools with improved prompt",
- "call-tools-from-mcp-clients": "Call tools from MCP clients",
- "migrate-from-toolkits": "Migrate from toolkits",
-};
diff --git a/app/en/home/build-tools/create-a-mcp-server/page.mdx b/app/en/home/build-tools/create-a-mcp-server/page.mdx
deleted file mode 100644
index c069316ed..000000000
--- a/app/en/home/build-tools/create-a-mcp-server/page.mdx
+++ /dev/null
@@ -1,326 +0,0 @@
----
-title: "Creating an MCP Server with Arcade"
-description: "Learn how to create, test, deploy, and publish a custom MCP Server with Arcade"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-# Creating an MCP Server with Arcade
-
-The `arcade_mcp_server` package is the secure framework to build and run MCP servers with your Arcade tools. It is easiest to use with the `arcade-mcp` package (Arcade's CLI) which can scaffold your MCP server with all the necessary files and dependencies, configure MCP Clients to connect to your server, deploy your server to the cloud, and more. This guide walks you through the complete process of creating a custom MCP server with Arcade.
-
-
-
-
-Build and run a secure MCP server with tools that you define.
-
-
-
-
-
-- The [`uv` package manager](https://docs.astral.sh/uv/getting-started/installation/)
-
-
-
-
-
-- How to run MCP servers with Arcade tools using the [`arcade_mcp_server`](/references/mcp/python/overview) package
-- How to use `arcade new` from the `arcade-mcp` CLI to create your server project with all necessary files and dependencies.
-- How to run your local MCP Server with the Arcade CLI and register it with the Arcade Engine so that your agent can find and use your tool.
-
-
-
-
-
-
-## Install the Arcade CLI
-
-In your terminal, run the following command to install the `arcade-mcp` package - Arcade's CLI:
-
-
-
-
-```bash
-uv tool install arcade-mcp
-```
-
-{" "}
-
-
- This will install the Arcade CLI as a [uv
- tool](https://docs.astral.sh/uv/guides/tools/#installing-tools), making it
- available system wide.
-
-
-
-
-
-
-```bash
-pip install arcade-mcp
-```
-
-
-
-
-## Create Your Server
-
-In your terminal, run the following command to scaffold a new MCP Server called `my_server`:
-
-```bash
-arcade new my_server
-cd my_server/src/my_server
-```
-
-This generates a Python module with the following structure:
-
-```bash
-my_server/
-├── src/
-│ └── my_server/
-│ ├── __init__.py
-│ ├── .env.example
-│ └── server.py
-└── pyproject.toml
-```
-
-1. **server.py** Main server file with MCPApp and example tools. It creates an `MCPApp`, defines tools with `@app.tool`, and will start the server with `app.run()` when the file is executed directly.
-1. **pyproject.toml** Dependencies and project configuration
-1. **.env.example** Example `.env` file containing a secret required by one of the generated tools in `server.py`. Environments are loaded on server start, so **if you update the `.env` file, you will need to restart your server.**
-
-```python filename="server.py" showLineNumbers
-#!/usr/bin/env python3
-"""my_server MCP server"""
-
-import sys
-from typing import Annotated
-
-import httpx
-from arcade_mcp_server import Context, MCPApp
-from arcade_mcp_server.auth import Reddit
-
-app = MCPApp(name="my_server", version="1.0.0", log_level="DEBUG")
-
-
-@app.tool
-def greet(name: Annotated[str, "The name of the person to greet"]) -> str:
- """Greet a person by name."""
- return f"Hello, {name}!"
-
-
-# To use this tool locally, you need to either set the secret in the .env file or as an environment variable
-@app.tool(requires_secrets=["MY_SECRET_KEY"])
-def whisper_secret(context: Context) -> Annotated[str, "The last 4 characters of the secret"]:
- """Reveal the last 4 characters of a secret"""
- # Secrets are injected into the context at runtime.
- # LLMs and MCP clients cannot see or access your secrets
- # You can define secrets in a .env file.
- try:
- secret = context.get_secret("MY_SECRET_KEY")
- except Exception as e:
- return str(e)
-
- return "The last 4 characters of the secret are: " + secret[-4:]
-
-# To use this tool locally, you need to install the Arcade CLI (uv tool install arcade-mcp)
-# and then run 'arcade login' to authenticate.
-@app.tool(requires_auth=Reddit(scopes=["read"]))
-async def get_posts_in_subreddit(
- context: Context, subreddit: Annotated[str, "The name of the subreddit"]
-) -> dict:
- """Get posts from a specific subreddit"""
- # Normalize the subreddit name
- subreddit = subreddit.lower().replace("r/", "").replace(" ", "")
-
- # Prepare the httpx request
- # OAuth token is injected into the context at runtime.
- # LLMs and MCP clients cannot see or access your OAuth tokens.
- oauth_token = context.get_auth_token_or_empty()
- headers = {
- "Authorization": f"Bearer {oauth_token}",
- "User-Agent": "finally-mcp-server",
- }
- params = {"limit": 5}
- url = f"https://oauth.reddit.com/r/{subreddit}/hot"
-
- # Make the request
- async with httpx.AsyncClient() as client:
- response = await client.get(url, headers=headers, params=params)
- response.raise_for_status()
-
- # Return the response
- return response.json()
-
-# Run with specific transport
-if __name__ == "__main__":
- # Get transport from command line argument, default to "stdio"
- # - "stdio" (default): Standard I/O for Claude Desktop, CLI tools, etc.
- # Supports tools that require_auth or require_secrets out-of-the-box
- # - "http": HTTPS streaming for Cursor, VS Code, etc.
- # Does not support tools that require_auth or require_secrets unless the server is deployed
- # using 'arcade deploy' or added in the Arcade Developer Dashboard with 'Arcade' server type
- transport = sys.argv[1] if len(sys.argv) > 1 else "stdio"
-
- # Run the server
- app.run(transport=transport, host="127.0.0.1", port=8000)
-```
-
-## Setup the secrets in your environment
-
-Secrets are sensitive strings like passwords, API keys, or other tokens that grant access to a protected resource or API. Arcade includes the "whisper_secret" tool that requires a secret key to be set in your environment. If the secret is not set, the tool will return an error.
-
-
-
-You can create a `.env` file at the same directory as your entrypoint file (`server.py`) and add your secret:
-
-```env filename=".env"
-MY_SECRET_KEY="my-secret-value"
-```
-
-The generated project includes a `.env.example` file with the secret key name and example value.
-You can rename it to `.env` to start using it.
-
-```bash
-mv .env.example .env
-```
-
-
-
-You can set the environment variable in your terminal directly with this command:
-
-```bash
-export MY_SECRET_KEY="my-secret-value"
-```
-
-
-
-
-## Connect to Arcade to unlock authorized tool calling
-
-Since the Reddit tool accesses information only available to your Reddit account, you'll need to authorize it. For this, you'll need to create an Arcade account and connect to it from the terminal, run:
-
-```bash
-arcade login
-```
-
-Follow the instructions in your browser, and once you've finished, your terminal will be connected to your Arcade account.
-
-## Run your MCP Server
-
-Run your MCP Server using one of the following commands in your terminal:
-
-
-
-
-
-```bash
-uv run server.py stdio
-```
-
-
- When using the stdio transport, MCP clients typically launch the MCP server as
- a subprocess. Because of this, the server may run in a different environment
- and not have access to secrets defined in your local `.env` file. Please refer
- to the [create a tool with
- secrets](/home/build-tools/create-a-tool-with-secrets) guide for more
- information.
-
-
-
-
-
-```bash
-uv run server.py http
-```
-
-For HTTP transport, view your server's API docs at [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
-
-
- For security reasons, Local HTTP servers do not currently support tool-level
- authorization and secrets. If you need to use tool-level authorization or
- secrets locally, you should use the stdio transport and configure the Arcade
- API key and secrets in your MCP connection settings. Otherwise, if you intend
- to expose your HTTP MCP server to the public internet with tool-level
- authorization and secrets, please follow the [deploying to the cloud with
- Arcade Deploy](/home/serve-tools/arcade-deploy) guide or the [on-prem MCP
- server](/home/deployment/on-prem-mcp) guide for secure remote deployment.
-
-
-
-
-
-You should see output like this in your terminal:
-
-```bash
-2025-11-03 13:46:11.041 | DEBUG | arcade_mcp_server.mcp_app:add_tool:242 - Added tool: greet
-2025-11-03 13:46:11.042 | DEBUG | arcade_mcp_server.mcp_app:add_tool:242 - Added tool: whisper_secret
-2025-11-03 13:46:11.043 | DEBUG | arcade_mcp_server.mcp_app:add_tool:242 - Added tool: get_posts_in_subreddit
-INFO | 13:46:11 | arcade_mcp_server.mcp_app:299 | Starting my_server v1.0.0 with 3 tools
-```
-
-## Configure your MCP Client(s)
-
-Now you can connect MCP Clients to your MCP server:
-
-
-
-
- ```bash
- # Configure Cursor to use your MCP server with the default transport (stdio)
- arcade configure cursor
-
- # Configure Cursor to use your MCP server with the http transport
- arcade configure cursor --transport http
- ```
-
-
-
-
- ```bash
- # Configure VS Code to use your MCP server with the default transport (stdio)
- arcade configure vscode
-
- # Configure VS Code to use your MCP server with the http transport
- arcade configure vscode --transport http
- ```
-
-
-
-
- ```bash
- # Configure Claude Desktop to use your MCP server with the default transport (stdio)
- arcade configure claude
-
- # Configure Claude Desktop to use your MCP server with the http transport
- arcade configure claude --transport http
- ```
-
-
-
-
-That's it! Your MCP server is running and connected to your AI assistant.
-
-
-
-## Key takeaways
-
-- **Minimal Setup** Create `MCPApp`, define tools with `@app.tool`, and run with `app.run()`
-- **Direct Execution** Run your server file directly with `uv run` or `python`
-- **Transport Flexibility** Works with both stdio and HTTP
-- **Type Annotations** Use `Annotated` from the builtin typing library to provide descriptions to the language model for parameters and return values
-- **Tool Docstrings** Use docstrings to provide a description of a tool to the language model
-- **Command Line Arguments** Pass transport type as command line argument
-
-### Next steps
-
-- **Create custom tools that use auth**: [Learn how to create tools with authorization](/home/build-tools/create-a-tool-with-auth)
-- **Create custom tools that use secrets**: [Learn how to create tools with secrets](/home/build-tools/create-a-tool-with-secrets)
-- **Learn the capabilities of the `Context` object**: [Understanding the Context object](/home/build-tools/tool-context)
-- **Evaluate your tools**: [Explore how to evaluate tool performance](/home/evaluate-tools/why-evaluate-tools)
-- **Deploy your MCP server**: [Learn how to deploy your MCP server](/home/serve-tools/arcade-deploy)
diff --git a/app/en/home/calling-tools/_meta.tsx b/app/en/home/calling-tools/_meta.tsx
new file mode 100644
index 000000000..875bb59c8
--- /dev/null
+++ b/app/en/home/calling-tools/_meta.tsx
@@ -0,0 +1,28 @@
+export default {
+ overview: "Overview",
+ "error-handling": "Handle errors",
+ "scheduled-executions": "Schedule tool executions",
+ "-- In 3rd party applications": {
+ type: "separator",
+ title: "In 3rd party applications",
+ },
+ "third-party-apps": "Call a tool in your IDEs, MCP clients, or agents",
+ "mcp-clients": "Connect to a MCP client",
+ "evaluation-suite": "Create an evaluation suite to test tools",
+ "mcp-gateway-auth": "Add authentication to your MCP gateway",
+ "-- In custom applications": {
+ type: "separator",
+ title: "In custom applications",
+ },
+ "calling-tools-custom-apps": "Call tools in your custom apps",
+ "authorized-tool-calling": "Authorize tool calls",
+ "auth-status-check": "Check authorization status",
+ "tool-formats": "Tool formats",
+ "connect-arcade-llm": "Connect Arcade tools to your LLM",
+ "ensure-consistent-evals": "Ensure consistent tool calls with evals",
+ "-- Reference": {
+ type: "separator",
+ title: "Reference",
+ },
+ "direct-api-call": "Direct third-party API call",
+};
diff --git a/app/en/home/auth/tool-auth-status/page.mdx b/app/en/home/calling-tools/auth-status-check/page.mdx
similarity index 100%
rename from app/en/home/auth/tool-auth-status/page.mdx
rename to app/en/home/calling-tools/auth-status-check/page.mdx
diff --git a/app/en/home/auth/auth-tool-calling/page.mdx b/app/en/home/calling-tools/authorized-tool-calling/page.mdx
similarity index 99%
rename from app/en/home/auth/auth-tool-calling/page.mdx
rename to app/en/home/calling-tools/authorized-tool-calling/page.mdx
index 2143e4714..cc78cb73a 100644
--- a/app/en/home/auth/auth-tool-calling/page.mdx
+++ b/app/en/home/calling-tools/authorized-tool-calling/page.mdx
@@ -30,14 +30,14 @@ from arcadepy import Arcade
client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
-````
+```
```js
import Arcade from "@arcadeai/arcadejs";
const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
-````
+```
@@ -83,7 +83,7 @@ if (authResponse.status !== "completed") {
console.log(`Click this link to authorize: ${authResponse.url}`);
}
-````
+```
@@ -123,7 +123,7 @@ emails_response = client.tools.execute(
user_id=USER_ID,
)
print(emails_response)
-````
+```
diff --git a/app/en/home/calling-tools/calling-tools-custom-apps/page.mdx b/app/en/home/calling-tools/calling-tools-custom-apps/page.mdx
new file mode 100644
index 000000000..6616015f2
--- /dev/null
+++ b/app/en/home/calling-tools/calling-tools-custom-apps/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Calling tools in your custom apps"
+description: "Learn how to integrate and call tools within your custom applications"
+---
+
+# Calling tools in your custom apps
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/calling-tools/connect-arcade-llm/page.mdx b/app/en/home/calling-tools/connect-arcade-llm/page.mdx
new file mode 100644
index 000000000..679027ce6
--- /dev/null
+++ b/app/en/home/calling-tools/connect-arcade-llm/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Connecting Arcade tools to your LLM"
+description: "Learn how to connect Arcade tools to your LLM"
+---
+
+# Connecting Arcade tools to your LLM
+
+Coming soon!
diff --git a/app/en/home/auth/call-third-party-apis-directly/page.mdx b/app/en/home/calling-tools/direct-api-call/page.mdx
similarity index 99%
rename from app/en/home/auth/call-third-party-apis-directly/page.mdx
rename to app/en/home/calling-tools/direct-api-call/page.mdx
index fbc3d8c23..baf6e256c 100644
--- a/app/en/home/auth/call-third-party-apis-directly/page.mdx
+++ b/app/en/home/calling-tools/direct-api-call/page.mdx
@@ -90,7 +90,7 @@ provider="google",
scopes=["https://www.googleapis.com/auth/gmail.readonly"],
)
-````
+```
```javascript
@@ -103,7 +103,7 @@ const user_id = "{arcade_user_id}";
let auth_response = await client.auth.start(user_id, "google", {
scopes: ["https://www.googleapis.com/auth/gmail.readonly"],
});
-````
+```
@@ -165,7 +165,7 @@ gmail.users().messages().list(userId="me").execute().get("messages", [])
print(email_messages)
-````
+```
```javascript
@@ -180,7 +180,7 @@ const response = await gmail.users.messages.list({
const email_messages = response.data.messages || [];
console.log(email_messages);
-````
+```
diff --git a/app/en/home/calling-tools/ensure-consistent-evals/page.mdx b/app/en/home/calling-tools/ensure-consistent-evals/page.mdx
new file mode 100644
index 000000000..18987cf4d
--- /dev/null
+++ b/app/en/home/calling-tools/ensure-consistent-evals/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Ensure consistent tool calls with evals"
+description: "Learn how to ensure consistent tool calls with evaluations"
+---
+
+# Ensure consistent tool calls with evals
+
+Coming soon!
diff --git a/app/en/home/use-tools/error-handling/page.mdx b/app/en/home/calling-tools/error-handling/page.mdx
similarity index 99%
rename from app/en/home/use-tools/error-handling/page.mdx
rename to app/en/home/calling-tools/error-handling/page.mdx
index f9e83926c..9f3f7a649 100644
--- a/app/en/home/use-tools/error-handling/page.mdx
+++ b/app/en/home/calling-tools/error-handling/page.mdx
@@ -175,4 +175,4 @@ As of now, MCP Clients do not return structured error information, only an error
## Building tools with error handling
-To learn more about how to build tools with error handling, see the [Build Tools](/home/build-tools/providing-useful-tool-errors) section.
+To learn more about how to build tools with error handling, see the [Build Tools](/home/build-tools/providing-useful-tool-errors) section.
\ No newline at end of file
diff --git a/app/en/home/calling-tools/evaluation-suite/page.mdx b/app/en/home/calling-tools/evaluation-suite/page.mdx
new file mode 100644
index 000000000..38bf6fef8
--- /dev/null
+++ b/app/en/home/calling-tools/evaluation-suite/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Creating an evaluation suite to test tools"
+description: "Learn how to create evaluation suites to test your tools effectively"
+---
+
+# Creating an evaluation suite to test tools
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/calling-tools/mcp-clients/_meta.tsx b/app/en/home/calling-tools/mcp-clients/_meta.tsx
new file mode 100644
index 000000000..14b13976f
--- /dev/null
+++ b/app/en/home/calling-tools/mcp-clients/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ cursor: "Cursor",
+ "claude-desktop": "Claude desktop",
+ "visual-studio-code": "Visual Studio Code",
+};
diff --git a/app/en/home/calling-tools/mcp-clients/claude-desktop/page.mdx b/app/en/home/calling-tools/mcp-clients/claude-desktop/page.mdx
new file mode 100644
index 000000000..3564263cd
--- /dev/null
+++ b/app/en/home/calling-tools/mcp-clients/claude-desktop/page.mdx
@@ -0,0 +1,42 @@
+import { Steps, Tabs, Callout } from "nextra/components";
+import { SignupLink } from "@/app/_components/analytics";
+
+# Use Arcade with Claude Desktop
+
+In this guide, you'll learn how to connect Claude Desktop to a local Arcade server.
+
+
+
+### Prerequisites
+
+1. Create an Arcade account
+2. Get an [Arcade API key](/home/api-keys)
+3. Create an [Arcade MCP Gateway](/home/mcp-gateways) and select the tools you want to use
+
+### Set up Claude Desktop
+
+1. Download and open [Claude Desktop](https://claude.ai/download)
+2. Claude Menu --> "Settings" --> "Developer" --> "Edit Config"
+3. Follow the guide [here](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp)
+4. Open the configuration file and replace the file contents with this:
+ * Give your MCP server a name, like `mcp-arcade`
+ * Use the the URL of your MCP Gateway.
+ * Add the API key as the bearer token within the `Authorization` header, and the email address that you used to sign up for the Arcade account as the `Arcade-User-ID` header
+
+```json
+{
+ "mcpServers": {
+ "arcade-mcp": {
+ "url": "https://api.arcade.dev/mcp/",
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+}
+```
+
+5. Restart Claude Desktop. Upon restarting, you should have access to the Arcade tools you installed.
+
+
diff --git a/app/en/home/calling-tools/mcp-clients/cursor/page.mdx b/app/en/home/calling-tools/mcp-clients/cursor/page.mdx
new file mode 100644
index 000000000..d22dc925f
--- /dev/null
+++ b/app/en/home/calling-tools/mcp-clients/cursor/page.mdx
@@ -0,0 +1,48 @@
+import { Steps, Callout } from "nextra/components";
+import { SignupLink } from "@/app/_components/analytics";
+
+
+# Use Arcade in Cursor
+
+In this guide, you'll learn how to connect Cursor to an Arcade MCP Gateway.
+
+
+
+### Prerequisites
+
+1. Create an Arcade account
+2. Get an [Arcade API key](/home/api-keys)
+3. Create an [Arcade MCP Gateway](/home/mcp-gateways) and select the tools you want to use
+
+### Set up Cursor
+
+3. Download and open [Cursor](https://cursor.com/download)
+4. Open the command palette and select **Open MCP Settings...**
+5. Choose **HTTP**
+6. Paste the URL of your MCP Gateway
+7. Give your MCP server a name, like `mcp-arcade`
+8. Add the API key as the bearer token within the `Authorization` header, and the email address that you used to sign up for the Arcade account as the `Arcade-User-ID` header
+
+Cursor will update your `settings.json` file with the following
+
+```json
+{
+ "mcpServers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+}
+```
+
+### Try it out
+
+1. Open the chat pane (typically command-l)
+1. Make sure you are in **Agent** mode
+1. Ask the agent to use a tool!
+
+
diff --git a/app/en/home/calling-tools/mcp-clients/visual-studio-code/page.mdx b/app/en/home/calling-tools/mcp-clients/visual-studio-code/page.mdx
new file mode 100644
index 000000000..bcb494226
--- /dev/null
+++ b/app/en/home/calling-tools/mcp-clients/visual-studio-code/page.mdx
@@ -0,0 +1,42 @@
+import { Steps, Callout } from "nextra/components";
+import { SignupLink } from "@/app/_components/analytics";
+
+# Use Arcade in Visual Studio Code
+
+In this guide, you'll learn how to connect Visual Studio Code to an Arcade MCP Gateway.
+
+
+
+### Prerequisites
+
+1. Create an Arcade account
+2. Get an [Arcade API key](/home/api-keys)
+3. Create an [Arcade MCP Gateway](/home/mcp-gateways) and select the tools you want to use
+
+### Set up Visual Studio Code
+
+3. Download and open [Visual Studio Code](https://code.visualstudio.com/download) (version 1.100.0 or higher)
+4. Open the command palette and select **MCP: Add Server...**
+5. Choose **HTTP**
+6. Paste the URL of your MCP Gateway. You may see a warning about Dynamic Client Registration. You can ignore this.
+7. Give your MCP server a name, like `mcp-arcade`
+8. Add the API key as the bearer token within the `Authorization` header, and the email address that you used to sign up for the Arcade account as the `Arcade-User-ID` header
+
+Visual Studio Code will update your `mcp.json` file, but you will manually need to add the headers above:
+
+```json
+{
+ "servers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "type": "http",
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+}
+```
+
+
diff --git a/app/en/home/calling-tools/mcp-gateway-auth/page.mdx b/app/en/home/calling-tools/mcp-gateway-auth/page.mdx
new file mode 100644
index 000000000..610325536
--- /dev/null
+++ b/app/en/home/calling-tools/mcp-gateway-auth/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Adding authentication to your MCP Gateway"
+description: "Learn how to add authentication to your MCP Gateway setup"
+---
+
+# Adding authentication to your MCP Gateway
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/use-tools/tools-overview/page.mdx b/app/en/home/calling-tools/overview/page.mdx
similarity index 99%
rename from app/en/home/use-tools/tools-overview/page.mdx
rename to app/en/home/calling-tools/overview/page.mdx
index 231f09542..113870fc5 100644
--- a/app/en/home/use-tools/tools-overview/page.mdx
+++ b/app/en/home/calling-tools/overview/page.mdx
@@ -94,4 +94,4 @@ This process shows the general outline of the Tool Augmented Generation (TAG) pr
### Next steps
- Explore the [MCP Servers](/mcp-servers) available on Arcade
-- Build your own [custom MCP Server](/home/build-tools/create-a-mcp-server)
+- Build your own [custom MCP Server](/home/build-tools/create-a-mcp-server)
\ No newline at end of file
diff --git a/app/en/home/calling-tools/scheduled-executions/page.mdx b/app/en/home/calling-tools/scheduled-executions/page.mdx
new file mode 100644
index 000000000..f9c311b2e
--- /dev/null
+++ b/app/en/home/calling-tools/scheduled-executions/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up scheduled tool executions"
+description: "Learn how to set up scheduled tool executions"
+---
+
+# Set up scheduled tool executions
+
+Coming soon!
diff --git a/app/en/home/calling-tools/third-party-apps/page.mdx b/app/en/home/calling-tools/third-party-apps/page.mdx
new file mode 100644
index 000000000..b7249ea0d
--- /dev/null
+++ b/app/en/home/calling-tools/third-party-apps/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Call a tool in your IDEs, MCP clients, or agents"
+description: "Learn how to call tools in third-party applications"
+---
+
+# Call a tool in your IDEs, MCP clients, or agents
+
+See our [quickstart guide](/home/quickstarts/call-tool-personal-agent) to learn how to call Arcade tools in third-party applications like IDEs, MCP clients, or agent frameworks.
diff --git a/app/en/home/use-tools/get-tool-definitions/page.mdx b/app/en/home/calling-tools/tool-formats/page.mdx
similarity index 100%
rename from app/en/home/use-tools/get-tool-definitions/page.mdx
rename to app/en/home/calling-tools/tool-formats/page.mdx
diff --git a/app/en/home/common-use-cases/_meta.tsx b/app/en/home/common-use-cases/_meta.tsx
new file mode 100644
index 000000000..910b56fc7
--- /dev/null
+++ b/app/en/home/common-use-cases/_meta.tsx
@@ -0,0 +1,7 @@
+export default {
+ "build-agent": "Build an agent that uses Arcade MCP servers",
+ "add-external-mcp-servers": "Add external MCP servers to Arcade",
+ "build-custom-mcp-server":
+ "Build a custom MCP server that you or others can put in your agent",
+ "turn-external-api-into-mcp-server": "Turn an external API into a MCP server",
+};
diff --git a/app/en/home/common-use-cases/add-external-mcp-servers/page.mdx b/app/en/home/common-use-cases/add-external-mcp-servers/page.mdx
new file mode 100644
index 000000000..ce8f61bc6
--- /dev/null
+++ b/app/en/home/common-use-cases/add-external-mcp-servers/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Add external MCP Servers to Arcade."
+description: "Learn how to add external MCP Servers to Arcade"
+---
+
+# Add external MCP Servers to Arcade.
+
+Coming soon!
diff --git a/app/en/home/common-use-cases/build-agent/page.mdx b/app/en/home/common-use-cases/build-agent/page.mdx
new file mode 100644
index 000000000..affcf84bb
--- /dev/null
+++ b/app/en/home/common-use-cases/build-agent/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Build an agent that uses Arcade MCP Servers."
+description: "Learn how to build an agent that uses Arcade MCP Servers"
+---
+
+# Build an agent that uses Arcade MCP Servers.
+
+Coming soon!
diff --git a/app/en/home/common-use-cases/build-custom-mcp-server/page.mdx b/app/en/home/common-use-cases/build-custom-mcp-server/page.mdx
new file mode 100644
index 000000000..4c1217c82
--- /dev/null
+++ b/app/en/home/common-use-cases/build-custom-mcp-server/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Build a custom MCP Server. that you or others can put in your agent."
+description: "Learn how to build a custom MCP Server for your agent"
+---
+
+# Build a custom MCP Server. that you or others can put in your agent.
+
+Coming soon!
diff --git a/app/en/home/common-use-cases/turn-external-api-into-mcp-server/page.mdx b/app/en/home/common-use-cases/turn-external-api-into-mcp-server/page.mdx
new file mode 100644
index 000000000..523dbba18
--- /dev/null
+++ b/app/en/home/common-use-cases/turn-external-api-into-mcp-server/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Turn an external API into a MCP Server."
+description: "Learn how to turn an external API into a MCP Server"
+---
+
+# Turn an external API into a MCP Server.
+
+Coming soon!
diff --git a/app/en/home/concepts/_meta.tsx b/app/en/home/concepts/_meta.tsx
new file mode 100644
index 000000000..fe11ad060
--- /dev/null
+++ b/app/en/home/concepts/_meta.tsx
@@ -0,0 +1,6 @@
+export default {
+ index: {
+ display: "hidden",
+ },
+ "tool-types": "Tool types",
+};
diff --git a/app/en/home/concepts/page.mdx b/app/en/home/concepts/page.mdx
new file mode 100644
index 000000000..009dc67b6
--- /dev/null
+++ b/app/en/home/concepts/page.mdx
@@ -0,0 +1,7 @@
+# Concepts
+
+Core concepts and principles of Arcade.
+
+## Overview
+
+Learn about fundamental concepts like tool types and more.
\ No newline at end of file
diff --git a/app/en/home/concepts/tool-types/page.mdx b/app/en/home/concepts/tool-types/page.mdx
new file mode 100644
index 000000000..83dd82a47
--- /dev/null
+++ b/app/en/home/concepts/tool-types/page.mdx
@@ -0,0 +1,7 @@
+# Tool Types
+
+Learn about different types of tools in Arcade.
+
+## Overview
+
+Understand the various categories and types of tools available.
\ No newline at end of file
diff --git a/app/en/home/configure-arcade-section/_meta.tsx b/app/en/home/configure-arcade-section/_meta.tsx
new file mode 100644
index 000000000..a099e546f
--- /dev/null
+++ b/app/en/home/configure-arcade-section/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "dashboard-section": "Dashboard",
+ "create-projects-section": "Create projects",
+};
diff --git a/app/en/home/configure-arcade-section/create-projects-section/page.mdx b/app/en/home/configure-arcade-section/create-projects-section/page.mdx
new file mode 100644
index 000000000..6cbf0f75d
--- /dev/null
+++ b/app/en/home/configure-arcade-section/create-projects-section/page.mdx
@@ -0,0 +1,7 @@
+# Create Projects
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about creating projects.
\ No newline at end of file
diff --git a/app/en/home/configure-arcade-section/dashboard-section/page.mdx b/app/en/home/configure-arcade-section/dashboard-section/page.mdx
new file mode 100644
index 000000000..a1c464252
--- /dev/null
+++ b/app/en/home/configure-arcade-section/dashboard-section/page.mdx
@@ -0,0 +1,7 @@
+# Dashboard
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about the Arcade dashboard.
\ No newline at end of file
diff --git a/app/en/home/creating-tools/_meta.tsx b/app/en/home/creating-tools/_meta.tsx
new file mode 100644
index 000000000..b46a101d9
--- /dev/null
+++ b/app/en/home/creating-tools/_meta.tsx
@@ -0,0 +1,9 @@
+export default {
+ "tool-basics": "Build a tool",
+ "evaluating-tools": "Evaluate tools",
+ "performance-tools": "Improve an existing toolkit",
+ "new-functionality": "Add your tools to Arcade's catalog",
+ "newest-models": "Ensure tools work with the newest models",
+ "error-handling": "Handle errors",
+ "registry-early-access": "Registry early access",
+};
diff --git a/app/en/home/creating-tools/error-handling/_meta.tsx b/app/en/home/creating-tools/error-handling/_meta.tsx
new file mode 100644
index 000000000..76b8981cc
--- /dev/null
+++ b/app/en/home/creating-tools/error-handling/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "useful-tool-errors": "Providing useful tool errors",
+ "retry-tools": "Retry tools with improved prompt",
+};
diff --git a/app/en/home/build-tools/retry-tools-with-improved-prompt/page.mdx b/app/en/home/creating-tools/error-handling/retry-tools/page.mdx
similarity index 100%
rename from app/en/home/build-tools/retry-tools-with-improved-prompt/page.mdx
rename to app/en/home/creating-tools/error-handling/retry-tools/page.mdx
diff --git a/app/en/home/build-tools/providing-useful-tool-errors/page.mdx b/app/en/home/creating-tools/error-handling/useful-tool-errors/page.mdx
similarity index 100%
rename from app/en/home/build-tools/providing-useful-tool-errors/page.mdx
rename to app/en/home/creating-tools/error-handling/useful-tool-errors/page.mdx
diff --git a/app/en/home/creating-tools/evaluating-tools/_meta.tsx b/app/en/home/creating-tools/evaluating-tools/_meta.tsx
new file mode 100644
index 000000000..39a1896e7
--- /dev/null
+++ b/app/en/home/creating-tools/evaluating-tools/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ "why-evaluate": "Why evaluate tools?",
+ "create-evaluation-suite": "Create an evaluation suite",
+ "run-evaluations": "Run evaluations",
+};
diff --git a/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx b/app/en/home/creating-tools/evaluating-tools/create-evaluation-suite/page.mdx
similarity index 99%
rename from app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx
rename to app/en/home/creating-tools/evaluating-tools/create-evaluation-suite/page.mdx
index c82f8e626..0907959a8 100644
--- a/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx
+++ b/app/en/home/creating-tools/evaluating-tools/create-evaluation-suite/page.mdx
@@ -316,4 +316,4 @@ suite.add_case(
## Next steps
- **See an example MCP server with evaluations**: [Source code of a server with evaluations](https://github.com/ArcadeAI/arcade-mcp/tree/139cc2e54db0e5815f1c79dbe9e3285b4fe2bd66/examples/mcp_servers/server_with_evaluations)
-- **Learn how to run evaluations**: [Run evaluations](/home/evaluate-tools/run-evaluations)
+- **Learn how to run evaluations**: [Run evaluations](/home/evaluate-tools/run-evaluations)
\ No newline at end of file
diff --git a/app/en/home/evaluate-tools/run-evaluations/page.mdx b/app/en/home/creating-tools/evaluating-tools/run-evaluations/page.mdx
similarity index 100%
rename from app/en/home/evaluate-tools/run-evaluations/page.mdx
rename to app/en/home/creating-tools/evaluating-tools/run-evaluations/page.mdx
diff --git a/app/en/home/evaluate-tools/why-evaluate-tools/page.mdx b/app/en/home/creating-tools/evaluating-tools/why-evaluate/page.mdx
similarity index 100%
rename from app/en/home/evaluate-tools/why-evaluate-tools/page.mdx
rename to app/en/home/creating-tools/evaluating-tools/why-evaluate/page.mdx
diff --git a/app/en/home/creating-tools/new-functionality/_meta.tsx b/app/en/home/creating-tools/new-functionality/_meta.tsx
new file mode 100644
index 000000000..821764621
--- /dev/null
+++ b/app/en/home/creating-tools/new-functionality/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "custom-toolkit": "Write custom toolkit",
+ "eval-new-functionality": "Write eval for functionality you want",
+};
diff --git a/app/en/home/creating-tools/new-functionality/custom-toolkit/page.mdx b/app/en/home/creating-tools/new-functionality/custom-toolkit/page.mdx
new file mode 100644
index 000000000..b43b5bfdb
--- /dev/null
+++ b/app/en/home/creating-tools/new-functionality/custom-toolkit/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Write custom toolkit"
+description: "Learn how to write custom toolkits"
+---
+
+# Write custom toolkit
+
+Coming soon!
diff --git a/app/en/home/creating-tools/new-functionality/eval-new-functionality/page.mdx b/app/en/home/creating-tools/new-functionality/eval-new-functionality/page.mdx
new file mode 100644
index 000000000..8d37291fc
--- /dev/null
+++ b/app/en/home/creating-tools/new-functionality/eval-new-functionality/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Write eval for functionality you want"
+description: "Learn how to write evaluations for functionality you want"
+---
+
+# Write eval for functionality you want
+
+Coming soon!
diff --git a/app/en/home/creating-tools/newest-models/_meta.tsx b/app/en/home/creating-tools/newest-models/_meta.tsx
new file mode 100644
index 000000000..0bc71b765
--- /dev/null
+++ b/app/en/home/creating-tools/newest-models/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "run-eval-new-model": "Run existing eval and observe outcome with new model",
+ "modify-tool-new-model": "Modify tool to work well with new model",
+};
diff --git a/app/en/home/creating-tools/newest-models/modify-tool-new-model/page.mdx b/app/en/home/creating-tools/newest-models/modify-tool-new-model/page.mdx
new file mode 100644
index 000000000..653e21c2f
--- /dev/null
+++ b/app/en/home/creating-tools/newest-models/modify-tool-new-model/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Modify tool to work well with new model"
+description: "Learn how to modify tools to work well with new models"
+---
+
+# Modify tool to work well with new model
+
+Coming soon!
diff --git a/app/en/home/creating-tools/newest-models/run-eval-new-model/page.mdx b/app/en/home/creating-tools/newest-models/run-eval-new-model/page.mdx
new file mode 100644
index 000000000..3da62f894
--- /dev/null
+++ b/app/en/home/creating-tools/newest-models/run-eval-new-model/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Run existing eval and observe outcome with new model"
+description: "Learn how to run existing evaluations with new models"
+---
+
+# Run existing eval and observe outcome with new model
+
+Coming soon!
diff --git a/app/en/home/creating-tools/performance-tools/_meta.tsx b/app/en/home/creating-tools/performance-tools/_meta.tsx
new file mode 100644
index 000000000..04730e0f9
--- /dev/null
+++ b/app/en/home/creating-tools/performance-tools/_meta.tsx
@@ -0,0 +1,7 @@
+export default {
+ "types-of-tools": "Types of tools",
+ "eval-starter-tools": "Write eval to assess combo of starter tools",
+ "custom-tool-improvements":
+ "Write custom tool that improves on relevant Starter tools",
+ "run-evaluations-2": "Run evaluations",
+};
diff --git a/app/en/home/creating-tools/performance-tools/custom-tool-improvements/page.mdx b/app/en/home/creating-tools/performance-tools/custom-tool-improvements/page.mdx
new file mode 100644
index 000000000..21b27b5ca
--- /dev/null
+++ b/app/en/home/creating-tools/performance-tools/custom-tool-improvements/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Write custom tool that improves on relevant Starter tools"
+description: "Learn how to write custom tools that improve on Starter tools"
+---
+
+# Write custom tool that improves on relevant Starter tools
+
+Coming soon!
diff --git a/app/en/home/creating-tools/performance-tools/eval-starter-tools/page.mdx b/app/en/home/creating-tools/performance-tools/eval-starter-tools/page.mdx
new file mode 100644
index 000000000..d5d282edd
--- /dev/null
+++ b/app/en/home/creating-tools/performance-tools/eval-starter-tools/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Write eval to assess combo of starter tools"
+description: "Learn how to write evaluations for combinations of starter tools"
+---
+
+# Write eval to assess combo of starter tools
+
+Coming soon!
diff --git a/app/en/home/creating-tools/performance-tools/run-evaluations-2/page.mdx b/app/en/home/creating-tools/performance-tools/run-evaluations-2/page.mdx
new file mode 100644
index 000000000..0920ed24c
--- /dev/null
+++ b/app/en/home/creating-tools/performance-tools/run-evaluations-2/page.mdx
@@ -0,0 +1,217 @@
+---
+title: "Run evaluations"
+description: "Learn how to run evaluations using Arcade"
+---
+
+# Run evaluations with the Arcade CLI
+
+The Arcade Evaluation Framework allows you to run evaluations of your tool-enabled language models conveniently using the Arcade CLI. This enables you to execute your evaluation suites, gather results, and analyze the performance of your models in an efficient and streamlined manner.
+
+
+
+
+Run evaluations of your tool-enabled language models using the Arcade CLI.
+
+
+
+
+
+- [Arcade CLI](/home/arcade-cli)
+- [An MCP Server](/home/build-tools/create-a-mcp-server)
+- [Create an evaluation suite](/home/evaluate-tools/create-an-evaluation-suite)
+
+
+
+
+
+- How to use the `arcade evals` CLI command to run evaluations.
+
+
+
+
+### Using the `arcade evals` Command
+
+To run evaluations, use the `arcade evals` command provided by the Arcade CLI. This command searches for evaluation files in the specified directory, executes any functions decorated with `@tool_eval`, and displays the results.
+
+#### Basic Usage
+
+```bash
+arcade evals
+```
+
+- ``: The directory containing your evaluation files. By default, it searches the current directory (`.`).
+
+For example, to run evaluations in the current directory:
+
+```bash
+arcade evals
+```
+
+#### Evaluation File Naming Convention
+
+The `arcade evals` command looks for Python files that start with `eval_` and end with `.py` (e.g., `eval_math_tools.py`, `eval_slack_messaging.py`). These files should contain your evaluation suites.
+
+#### Command Options
+
+The `arcade evals` command supports several options to customize the evaluation process:
+
+- `--details`, `-d`: Show detailed results for each evaluation case, including critic feedback.
+
+ Example:
+
+ ```bash
+ arcade evals --details .
+ ```
+
+- `--models`, `-m`: Specify the models to use for evaluation. Provide a comma-separated list of model names.
+
+ Example:
+
+ ```bash
+ arcade evals --models gpt-4o,gpt-5 .
+ ```
+
+- `--max-concurrent`, `-c`: Set the maximum number of concurrent evaluations to run in parallel.
+
+ Example:
+
+ ```bash
+ arcade evals --max-concurrent 4 .
+ ```
+
+- `--provider`, `-p`: The provider of the models to use for evaluation. Uses OpenAI by default.
+
+ Example:
+
+ ```bash
+ arcade evals --provider openai .
+ ```
+
+- `--provider-api-key`, `-k`: The model provider API key. If not provided, will look for the appropriate environment variable based on the provider (e.g., OPENAI_API_KEY for openai provider), first in the current environment, then in the current working directory's .env file.
+
+ Example:
+
+ ```bash
+ arcade evals --provider-api-key my-api-key .
+ ```
+
+- `--debug`: Show debug information in the CLI.
+
+ Example:
+
+ ```bash
+ arcade evals --debug .
+ ```
+
+- `--help`: Show help information and exit.
+
+ Example:
+
+ ```bash
+ arcade evals --help
+ ```
+
+#### Example Command
+
+Running evaluations in the `arcade_my_tools/evals` directory, showing detailed results, using the `gpt-5` model:
+
+```bash
+arcade evals arcade_my_tools/evals --details --models gpt-5 -k my-openai-api-key
+```
+
+### Execution Process
+
+When you run the `arcade evals` command, the following steps occur:
+
+1. **Preparation**: The CLI loads the evaluation suites from the specified directory, looking for files that match the naming convention.
+
+2. **Execution**: The evaluation suites are executed asynchronously. Each suite's evaluation function, decorated with `@tool_eval`, is called with the appropriate configuration, including the model and concurrency settings.
+
+3. **Concurrency**: Evaluations can run concurrently based on the `--max-concurrent` setting, improving efficiency.
+
+4. **Result Aggregation**: Results from all evaluation cases and models are collected and aggregated.
+
+### Displaying Results
+
+After the evaluations are complete, the results are displayed in a concise and informative format, similar to testing frameworks like `pytest`. The output includes:
+
+- **Summary**: Shows the total number of cases, how many passed, failed, or issued warnings.
+
+ Example:
+
+ ```
+ Summary -- Total: 5 -- Passed: 4 -- Failed: 1
+ ```
+
+- **Detailed Case Results**: For each evaluation case, the status (PASSED, FAILED, WARNED), the case name, and the score are displayed.
+
+ Example:
+
+ ```
+ PASSED Add two large numbers -- Score: 1.00
+ FAILED Send DM with ambiguous username -- Score: 0.75
+ ```
+
+- **Critic Feedback**: If the `--details` flag is used, detailed feedback from each critic is provided, highlighting matches, mismatches, and scores for each evaluated field.
+
+ Example:
+
+ ```
+ Details:
+ user_name:
+ Match: False, Score: 0.00/0.50
+ Expected: johndoe
+ Actual: john_doe
+ message:
+ Match: True, Score: 0.50/0.50
+ ```
+
+### Interpreting the Results
+
+- **Passed**: The evaluation case met or exceeded the fail threshold specified in the rubric.
+
+- **Failed**: The evaluation case did not meet the fail threshold.
+
+- **Warnings**: If the score is between the warn threshold and the fail threshold, a warning is issued.
+
+Use the detailed feedback to understand where the model's performance can be improved, particularly focusing on mismatches identified by critics.
+
+### Customizing Evaluations
+
+You can customize the evaluation process by adjusting:
+
+- **Rubrics**: Modify fail and warn thresholds, and adjust weights to emphasize different aspects of evaluation.
+
+- **Critics**: Add or modify critics in your evaluation cases to target specific arguments or behaviors.
+
+- **Concurrency**: Adjust the `--max-concurrent` option to optimize performance based on your environment.
+
+### Handling Multiple Models
+
+You can evaluate multiple models in a single run by specifying them in the `--models` option as a comma-separated list. This allows you to compare the performance of different models across the same evaluation suites.
+
+Example:
+
+```bash
+arcade evals . --models gpt-4o,gpt-5
+```
+
+### Considerations
+
+- **Evaluation Files**: Ensure your evaluation files are correctly named and contain the evaluation suites decorated with `@tool_eval`.
+
+- **Provider API Keys**: If you are using a different provider, you will need to set the appropriate API key in an environment variable, or use the `--provider-api-key` option.
+
+- **Tool Catalog**: Ensure your tool catalog is correctly defined and includes all the tools you want to evaluate.
+
+- **Weight distribution**: Ensure your weight distribution reflects the importance of each critic and that the sum of the weights is `1.0`.
+
+## Conclusion
+
+Running evaluations using the Arcade CLI provides a powerful and convenient way to assess the tool-calling capabilities of your language models. By leveraging the `arcade evals` command, you can efficiently execute your evaluation suites, analyze results, and iterate on your models and tools.
+
+Integrating this evaluation process into your development workflow helps ensure that your models interact with tools as expected, enhances reliability, and builds confidence in deploying actionable language models in production environments.
+
+## Next steps
+
+- **See an example MCP server with evaluations**: [Source code of a server with evaluations](https://github.com/ArcadeAI/arcade-mcp/tree/139cc2e54db0e5815f1c79dbe9e3285b4fe2bd66/examples/mcp_servers/server_with_evaluations)
diff --git a/app/en/home/use-tools/types-of-tools/page.mdx b/app/en/home/creating-tools/performance-tools/types-of-tools/page.mdx
similarity index 100%
rename from app/en/home/use-tools/types-of-tools/page.mdx
rename to app/en/home/creating-tools/performance-tools/types-of-tools/page.mdx
diff --git a/app/en/home/creating-tools/registry-early-access/page.mdx b/app/en/home/creating-tools/registry-early-access/page.mdx
new file mode 100644
index 000000000..10cbd2fbd
--- /dev/null
+++ b/app/en/home/creating-tools/registry-early-access/page.mdx
@@ -0,0 +1,25 @@
+---
+title: "Arcade Registry Early Access"
+description: "Learn about the Arcade Registry and how to get early access"
+---
+
+import { EarlyAccessRegistrySurvey } from "@/app/_components/early-access-registry-survey";
+import { Callout } from "nextra/components";
+import { TakeSurvey } from "./take-survey";
+
+# The Arcade Registry
+
+The **Arcade Registry** is how agentic tool developers share their work with the world. Arcade.dev is collecting all the integrations that agents will ever need in one place - think HuggingFace or Pypi but for LLM tools. A powerful community of open source and for-profit developers building out robust and evaluated workflows is how agents can be elevated to being _truly_ useful.
+
+
+
+**_The components of the Arcade Registry_**
+
+
+Unlike traditional read-only tool libraries, Arcade.dev couples the runtime with the registry. This way we can collect real metrics and usage information about your tools, sharing meaningful information and feedback back to the developers. You'll get error reports and statistics about how your tools are getting used. Arcade.dev also makes it possible for developers to optionally choose to sell their tools with a markup on top of the Arcade platform fees.
+
+Thanks to the Arcade Engine, your MCP Servers will be available via all the protocols Arcade supports - be that MCP for locally-running applications, OXP for server applications, and whatever comes next. Use the open-source Arcade SDKs to future-proof your tools.
+
+We are seeking beta testers who are interested in building, maintaining, and sharing MCP Servers with the world in either a free-to-use or for-profit manner. Sign up today to join the Arcade Registry Beta.
+
+
\ No newline at end of file
diff --git a/app/en/home/creating-tools/registry-early-access/take-survey.tsx b/app/en/home/creating-tools/registry-early-access/take-survey.tsx
new file mode 100644
index 000000000..89bf472d5
--- /dev/null
+++ b/app/en/home/creating-tools/registry-early-access/take-survey.tsx
@@ -0,0 +1,16 @@
+"use client";
+
+import { Button } from "@arcadeai/design-system";
+
+export const TakeSurvey = () => (
+
+);
diff --git a/app/en/home/creating-tools/tool-basics/_meta.tsx b/app/en/home/creating-tools/tool-basics/_meta.tsx
new file mode 100644
index 000000000..16d64d3b8
--- /dev/null
+++ b/app/en/home/creating-tools/tool-basics/_meta.tsx
@@ -0,0 +1,11 @@
+export default {
+ "when-build-tools": "When to build tools",
+ "compare-server-types": "Compare Server Types",
+ "build-mcp-server": "Build MCP Server to write custom tools",
+ "create-tool-auth": "Create a tool with auth",
+ "create-tool-secrets": "Create a tool with secrets",
+ "runtime-data-access": "Accessing runtime data (Tools and Context)",
+ "call-tools-mcp": "Call tools from MCP clients",
+ "organize-mcp-tools": "Organize MCP server tools",
+ "migrate-toolkits": "Migrate from toolkits to MCP Servers",
+};
diff --git a/app/en/home/custom-mcp-server-quickstart/page.mdx b/app/en/home/creating-tools/tool-basics/build-mcp-server/page.mdx
similarity index 99%
rename from app/en/home/custom-mcp-server-quickstart/page.mdx
rename to app/en/home/creating-tools/tool-basics/build-mcp-server/page.mdx
index e4701d707..987c5a78b 100644
--- a/app/en/home/custom-mcp-server-quickstart/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/build-mcp-server/page.mdx
@@ -271,4 +271,4 @@ Ensure you have set the environment variable in your terminal or `.env` file, an
- **Learn how to write a tool with secrets**: [Create a tool with secrets](/home/build-tools/create-a-tool-with-secrets)
- **Learn more about the Context object**: [Tools and Context](/home/build-tools/tool-context)
- **Learn how to write tool evaluations**: [Create an evaluation suite](/home/evaluate-tools/create-an-evaluation-suite) to optimize them for LLM usage
-- **Learn how to deploy your MCP server**: [Deploy your MCP server](/home/serve-tools/arcade-deploy)
+- **Learn how to deploy your MCP server**: [Deploy your MCP server](/home/serve-tools/arcade-deploy)
\ No newline at end of file
diff --git a/app/en/home/build-tools/call-tools-from-mcp-clients/page.mdx b/app/en/home/creating-tools/tool-basics/call-tools-mcp/page.mdx
similarity index 99%
rename from app/en/home/build-tools/call-tools-from-mcp-clients/page.mdx
rename to app/en/home/creating-tools/tool-basics/call-tools-mcp/page.mdx
index c6873890f..3f86d1684 100644
--- a/app/en/home/build-tools/call-tools-from-mcp-clients/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/call-tools-mcp/page.mdx
@@ -320,4 +320,4 @@ Then, your MCP client's configuration file should look like this:
-
+
\ No newline at end of file
diff --git a/app/en/home/compare-server-types/page.mdx b/app/en/home/creating-tools/tool-basics/compare-server-types/page.mdx
similarity index 99%
rename from app/en/home/compare-server-types/page.mdx
rename to app/en/home/creating-tools/tool-basics/compare-server-types/page.mdx
index 3dfecf1ff..a0f87c64a 100644
--- a/app/en/home/compare-server-types/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/compare-server-types/page.mdx
@@ -14,4 +14,4 @@ Depending on the transport you use and where you want to run your MCP server, Ar
| http | remote ([unprotected](/home/glossary#unprotected-mcp-servers)) | ✅ | ❌ | ❌ | ❌ |
| http | local ([protected](/home/glossary#protected-mcp-servers)) `coming soon` | ✅ | ✅ | ✅ | ✅ |
| http | remote ([protected](/home/glossary#protected-mcp-servers)) | ✅ | ✅ | ✅ | ✅ |
-| http | Arcade Cloud | ✅ | ✅ | ✅ | ✅ |
+| http | Arcade Cloud | ✅ | ✅ | ✅ | ✅ |
\ No newline at end of file
diff --git a/app/en/home/build-tools/create-a-tool-with-auth/page.mdx b/app/en/home/creating-tools/tool-basics/create-tool-auth/page.mdx
similarity index 98%
rename from app/en/home/build-tools/create-a-tool-with-auth/page.mdx
rename to app/en/home/creating-tools/tool-basics/create-tool-auth/page.mdx
index 7b1b3e0b0..7c76600e0 100644
--- a/app/en/home/build-tools/create-a-tool-with-auth/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/create-tool-auth/page.mdx
@@ -32,7 +32,7 @@ Create and use an MCP tool that requires OAuth to access Reddit, prompting users
-An auth provider is the service that issues and manages the OAuth token your tool uses. It is the identity “source of truth” your tool integrates with to request permissions and obtain OAuth tokens.
+An auth provider is the service that issues and manages the OAuth token your tool uses. It is the identity "source of truth" your tool integrates with to request permissions and obtain OAuth tokens.
When you create a tool with `requires_auth`, you specify which provider to use. In this example, **`arcade_mcp_server.auth.Reddit` specifies the Reddit auth provider.**
@@ -335,4 +335,4 @@ if __name__ == "__main__":
# - "http": HTTP streamable transport
app.run(transport=transport, host="127.0.0.1", port=8000)
-```
+```
\ No newline at end of file
diff --git a/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx b/app/en/home/creating-tools/tool-basics/create-tool-secrets/page.mdx
similarity index 99%
rename from app/en/home/build-tools/create-a-tool-with-secrets/page.mdx
rename to app/en/home/creating-tools/tool-basics/create-tool-secrets/page.mdx
index 18c347df8..078cf3625 100644
--- a/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/create-tool-secrets/page.mdx
@@ -292,4 +292,4 @@ For HTTP transport, view your server's API docs at [http://127.0.0.1:8000/docs](
-
+
\ No newline at end of file
diff --git a/app/en/home/build-tools/migrate-from-toolkits/page.mdx b/app/en/home/creating-tools/tool-basics/migrate-toolkits/page.mdx
similarity index 100%
rename from app/en/home/build-tools/migrate-from-toolkits/page.mdx
rename to app/en/home/creating-tools/tool-basics/migrate-toolkits/page.mdx
diff --git a/app/en/home/build-tools/organize-mcp-server-tools/page.mdx b/app/en/home/creating-tools/tool-basics/organize-mcp-tools/page.mdx
similarity index 100%
rename from app/en/home/build-tools/organize-mcp-server-tools/page.mdx
rename to app/en/home/creating-tools/tool-basics/organize-mcp-tools/page.mdx
diff --git a/app/en/home/build-tools/tool-context/page.mdx b/app/en/home/creating-tools/tool-basics/runtime-data-access/page.mdx
similarity index 97%
rename from app/en/home/build-tools/tool-context/page.mdx
rename to app/en/home/creating-tools/tool-basics/runtime-data-access/page.mdx
index 970768202..a5fba8974 100644
--- a/app/en/home/build-tools/tool-context/page.mdx
+++ b/app/en/home/creating-tools/tool-basics/runtime-data-access/page.mdx
@@ -97,7 +97,7 @@ await context.log.log("info", "Info message") # equivalent to await context.log.
#### Sampling
-[Sampling in MCP](https://modelcontextprotocol.io/specification/2025-06-18/client/sampling) is a way for servers to request LLM sampling (“completions” or “generations”) from language models via clients. This flow allows clients to maintain control over model access, selection, and permissions while enabling servers to leverage AI capabilities—with no server API keys necessary.
+[Sampling in MCP](https://modelcontextprotocol.io/specification/2025-06-18/client/sampling) is a way for servers to request LLM sampling ("completions" or "generations") from language models via clients. This flow allows clients to maintain control over model access, selection, and permissions while enabling servers to leverage AI capabilities—with no server API keys necessary.
```python
await context.sampling.create_message(messages, system_prompt)
@@ -293,4 +293,4 @@ For HTTP transport, view your server's API docs at [http://127.0.0.1:8000/docs](
### Next Steps
- [Build a custom tool that requires user authorization](/home/build-tools/create-a-tool-with-auth)
-- [Build a custom tool with secrets](/home/build-tools/create-a-tool-with-secrets)
+- [Build a custom tool with secrets](/home/build-tools/create-a-tool-with-secrets)
\ No newline at end of file
diff --git a/app/en/home/creating-tools/tool-basics/when-build-tools/page.mdx b/app/en/home/creating-tools/tool-basics/when-build-tools/page.mdx
new file mode 100644
index 000000000..213ac1e75
--- /dev/null
+++ b/app/en/home/creating-tools/tool-basics/when-build-tools/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "When to build tools"
+description: "Learn when to build tools"
+---
+
+# When to build tools
+
+Coming soon!
diff --git a/app/en/home/crewai/use-arcade-tools/page.mdx b/app/en/home/crewai/use-arcade-tools/page.mdx
deleted file mode 100644
index 555dc8e87..000000000
--- a/app/en/home/crewai/use-arcade-tools/page.mdx
+++ /dev/null
@@ -1,148 +0,0 @@
----
-title: "Use Arcade tools with CrewAI"
-description: "Integrate Arcade tools into your CrewAI applications"
----
-
-import { Steps } from "nextra/components";
-import ToggleContent from "@/app/_components/toggle-content";
-
-## Use CrewAI with Arcade
-
-In this guide, we will explore how to integrate Arcade tools into your CrewAI application. Follow the step-by-step instructions below. If a tool requires authorization, an authorization URL will appear in the console, waiting for your approval. This process ensures that only the tools you choose to authorize are executed.
-
-To tailor the tool authorization flow to meet your application's specific needs, check out the [Custom Auth Flow with CrewAI](/home/crewai/custom-auth-flow) guide.
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-
-### Set up your environment
-
-Install the required package, and ensure your environment variables are set with your Arcade and OpenAI API keys:
-
-```bash
-pip install crewai-arcade
-```
-
-### Configure API keys
-
-Provide your Arcade and OpenAI API keys. You can store them in environment variables like so:
-
-```bash
-export ARCADE_API_KEY="your_arcade_api_key"
-export OPENAI_API_KEY="your_openai_api_key"
-```
-
-### Get Arcade tools
-
-Use the `ArcadeToolManager` to initialize, add, and get Arcade tools:
-
-```python
-from crewai_arcade import ArcadeToolManager
-
-manager = ArcadeToolManager(default_user_id="{arcade_user_id}")
-
-"""
-Retrieves the provided tools and/or MCP Servers as CrewAI StructuredTools.
-"""
-tools = manager.get_tools(tools=["Gmail.ListEmails"], toolkits=["Slack"])
-```
-
-### Use tools in your CrewAI agent team
-
-Create a Crew that uses your tools. When the tool is called, you will be prompted to go visit an authorization page to authorize the tool before it executes.
-
-```python
-from crewai import Agent, Crew, Task
-from crewai.llm import LLM
-
-crew_agent = Agent(
- role="Main Agent",
- backstory="You are a helpful assistant",
- goal="Help the user with their requests",
- tools=tools,
- allow_delegation=False,
- verbose=True,
- llm=LLM(model="gpt-4o"),
-)
-
-task = Task(
- description="Get the 5 most recent emails from the user's inbox and summarize them and recommend a response for each.",
- expected_output="A bulleted list with a one sentence summary of each email and a recommended response to the email.",
- agent=crew_agent,
- tools=crew_agent.tools,
-)
-
-crew = Crew(
- agents=[crew_agent],
- tasks=[task],
- verbose=True,
- memory=True,
-)
-
-result = crew.kickoff()
-
-print("\n\n\n ------------ Result ------------ \n\n\n")
-print(result)
-```
-
-
-
-
-
-```python
-from crewai import Agent, Crew, Task
-from crewai.llm import LLM
-from crewai_arcade import ArcadeToolManager
-
-manager = ArcadeToolManager(default_user_id="{arcade_user_id}")
-
-tools = manager.get_tools(tools=["Gmail.ListEmails"])
-
-
-crew_agent = Agent(
- role="Main Agent",
- backstory="You are a helpful assistant",
- goal="Help the user with their requests",
- tools=tools,
- allow_delegation=False,
- verbose=True,
- llm=LLM(model="gpt-4o"),
-)
-
-task = Task(
- description="Get the 5 most recent emails from the user's inbox and summarize them and recommend a response for each.",
- expected_output="A bulleted list with a one sentence summary of each email and a recommended response to the email.",
- agent=crew_agent,
- tools=crew_agent.tools,
-)
-
-crew = Crew(
- agents=[crew_agent],
- tasks=[task],
- verbose=True,
- memory=True,
-)
-
-result = crew.kickoff()
-
-print("\n\n\n ------------ Result ------------ \n\n\n")
-print(result)
-```
-
-
-
-## Tips for selecting tools
-
-- **Relevance**: Pick only the tools you need. Avoid using all tools at once.
-- **Avoid conflicts**: Be mindful of duplicate or overlapping functionality.
-
-## Next steps
-
-Now that you have integrated Arcade tools into your CrewAI agent team, you can:
-
-- Experiment with different toolkits, such as "Math" or "Search."
-- Customize the agent's prompts for specific tasks.
-- Customize the tool authorization and execution flow to meet your application's requirements.
diff --git a/app/en/home/deployment-hosting/_meta.tsx b/app/en/home/deployment-hosting/_meta.tsx
new file mode 100644
index 000000000..c2e074fd8
--- /dev/null
+++ b/app/en/home/deployment-hosting/_meta.tsx
@@ -0,0 +1,9 @@
+export default {
+ overview: "Overview",
+ "cloud-infrastructure": "Use Arcade's cloud infrastructure",
+ "on-premise-mcp": "Use on-premise MCP servers",
+ "configure-engine": "Configure Arcade's engine",
+ "oauth-provider": "Configure an OAuth provider",
+ "evals-cicd": "Set evals on CI/CD",
+ "arcade-deploy": "Arcade deploy",
+};
diff --git a/app/en/home/serve-tools/arcade-deploy/page.mdx b/app/en/home/deployment-hosting/arcade-deploy/page.mdx
similarity index 99%
rename from app/en/home/serve-tools/arcade-deploy/page.mdx
rename to app/en/home/deployment-hosting/arcade-deploy/page.mdx
index 7157bbd00..422936989 100644
--- a/app/en/home/serve-tools/arcade-deploy/page.mdx
+++ b/app/en/home/deployment-hosting/arcade-deploy/page.mdx
@@ -162,4 +162,4 @@ You can use any of the available [Arcade clients](/references) to call the tools
-Your MCP Server is now deployed and managed by Arcade, and ready to be used in your MCP clients!
+Your MCP Server is now deployed and managed by Arcade, and ready to be used in your MCP clients!
\ No newline at end of file
diff --git a/app/en/home/deployment/arcade-cloud-infra/page.mdx b/app/en/home/deployment-hosting/cloud-infrastructure/page.mdx
similarity index 97%
rename from app/en/home/deployment/arcade-cloud-infra/page.mdx
rename to app/en/home/deployment-hosting/cloud-infrastructure/page.mdx
index cce088b45..4f25bac1f 100644
--- a/app/en/home/deployment/arcade-cloud-infra/page.mdx
+++ b/app/en/home/deployment-hosting/cloud-infrastructure/page.mdx
@@ -25,4 +25,4 @@ Traffic from Arcade Cloud will be existing our infrastructure from the following
## VPC Peering
-VPC Peering is available for our enterprise customers upon request. If you are interested in VPC Peering, please [contact us](/home/contact-us).
+VPC Peering is available for our enterprise customers upon request. If you are interested in VPC Peering, please [contact us](/home/contact-us).
\ No newline at end of file
diff --git a/app/en/home/deployment/engine-configuration/page.mdx b/app/en/home/deployment-hosting/configure-engine/page.mdx
similarity index 95%
rename from app/en/home/deployment/engine-configuration/page.mdx
rename to app/en/home/deployment-hosting/configure-engine/page.mdx
index 5ec5e8445..97b51502f 100644
--- a/app/en/home/deployment/engine-configuration/page.mdx
+++ b/app/en/home/deployment-hosting/configure-engine/page.mdx
@@ -77,7 +77,7 @@ export PATH=$PATH:/path/to/your/binary
docker run -d -p 9099:9099 -v ./engine.yaml:/bin/engine.yaml ghcr.io/arcadeai/engine:latest
```
- where config.yaml is the path to the [configuration file](/home/deployment/engine-configuration).
+ where config.yaml is the path to the [configuration file](/home/deployment-hosting/configure-engine).
@@ -88,7 +88,7 @@ Let's explore each file to understand their purpose and how to locate them.
## Engine configuration file
-The `engine.yaml` file controls Arcade Engine settings. It supports variable expansion so you can integrate secrets and environment values seamlessly. You can customize this file to suit your setup. For more details, check the [Engine Configuration](/home/deployment/engine-configuration) page.
+The `engine.yaml` file controls Arcade Engine settings. It supports variable expansion so you can integrate secrets and environment values seamlessly. You can customize this file to suit your setup. For more details, check the [Engine Configuration](/home/deployment-hosting/configure-engine) page.
Choose your installation method to view the default location of `engine.yaml`:
@@ -107,7 +107,7 @@ Choose your installation method to view the default location of `engine.yaml`:
```bash
$HOME/.arcade/engine.yaml
```
- To manually download the engine.yaml, you can get an example from the [Configuration Templates](/home/deployment/engine-configuration#engineyaml) and add it to `$HOME/.arcade/engine.yaml`.
+ To manually download the engine.yaml, you can get an example from the [Configuration Templates](/home/deployment-hosting/configure-engine#engineyaml) and add it to `$HOME/.arcade/engine.yaml`.
@@ -132,7 +132,7 @@ Select your installation method below to see the default path for `engine.env`:
```bash
$HOME/.arcade/engine.env
```
- To manually download the `engine.env`, refer to the [Configuration Templates](/home/deployment/engine-configuration#engineenv).
+ To manually download the `engine.env`, refer to the [Configuration Templates](/home/deployment-hosting/configure-engine#engineenv).
@@ -234,11 +234,11 @@ For local development, set `api.development = true`.
## Auth configuration
-Arcade Engine manages auth for [AI tools](/home/auth/auth-tool-calling) and [direct API calls](/home/auth/call-third-party-apis-directly). It supports many built-in [auth providers](/home/auth-providers), and can also connect to any [OAuth 2.0](/home/auth-providers/oauth2) authorization server.
+Arcade Engine manages auth for [AI tools](/home/auth/auth-tool-calling) and [direct API calls](/home/auth/call-third-party-apis-directly). It supports many built-in [auth providers](/home/sharing-with-end-users/custom-auth), and can also connect to any [OAuth 2.0](/home/sharing-with-end-users/custom-auth/oauth2) authorization server.
The `auth.providers` section defines the providers that users can authorize with. Each provider must have a unique `id` in the array. There are two ways to configure a provider:
-For [built-in providers](/home/auth-providers), use the `provider_id` field to reference the pre-built configuration. For example:
+For [built-in providers](/home/sharing-with-end-users/custom-auth), use the `provider_id` field to reference the pre-built configuration. For example:
```yaml
auth:
@@ -252,7 +252,7 @@ auth:
client_secret: ${env:GITHUB_CLIENT_SECRET}
```
-For custom OAuth 2.0 providers, specify the full connection details in the `oauth2` sub-section. For full documentation on the custom provider configuration, see the [OAuth 2.0 provider configuration](/home/auth-providers/oauth2) page.
+For custom OAuth 2.0 providers, specify the full connection details in the `oauth2` sub-section. For full documentation on the custom provider configuration, see the [OAuth 2.0 provider configuration](/home/sharing-with-end-users/custom-auth/oauth2) page.
You can specify a mix of built-in and custom providers.
@@ -308,7 +308,7 @@ openssl rand -base64 32
### Default root key
-When you [install Arcade Engine locally](/home/deployment/engine-configuration), an `engine.env` file is created with a default root key:
+When you [install Arcade Engine locally](/home/deployment-hosting/configure-engine), an `engine.env` file is created with a default root key:
```bash
# Encryption keys (change this when deploying to production)
@@ -686,4 +686,4 @@ X_CLIENT_SECRET=
ZOOM_CLIENT_ID=""
ZOOM_CLIENT_SECRET=
-```
+```
\ No newline at end of file
diff --git a/app/en/home/deployment-hosting/evals-cicd/page.mdx b/app/en/home/deployment-hosting/evals-cicd/page.mdx
new file mode 100644
index 000000000..9b7f9a658
--- /dev/null
+++ b/app/en/home/deployment-hosting/evals-cicd/page.mdx
@@ -0,0 +1,3 @@
+# Set evals on CI/CD
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/deployment-hosting/oauth-provider/page.mdx b/app/en/home/deployment-hosting/oauth-provider/page.mdx
new file mode 100644
index 000000000..77427ac50
--- /dev/null
+++ b/app/en/home/deployment-hosting/oauth-provider/page.mdx
@@ -0,0 +1,3 @@
+# Configure an OAuth provider
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/deployment/on-prem-mcp/page.mdx b/app/en/home/deployment-hosting/on-premise-mcp/page.mdx
similarity index 99%
rename from app/en/home/deployment/on-prem-mcp/page.mdx
rename to app/en/home/deployment-hosting/on-premise-mcp/page.mdx
index 21f55a3de..9378f783f 100644
--- a/app/en/home/deployment/on-prem-mcp/page.mdx
+++ b/app/en/home/deployment-hosting/on-premise-mcp/page.mdx
@@ -317,4 +317,4 @@ You can now test your MCP Server by making requests using the Playground, or an
- [Create custom tools](/home/build-tools/create-a-mcp-server) for your MCP Server
- [Set up authentication](/home/build-tools/create-a-tool-with-auth) for secure access to resources
-- [Configure secrets](/home/build-tools/create-a-tool-with-secrets) for your MCP Server
+- [Configure secrets](/home/build-tools/create-a-tool-with-secrets) for your MCP Server
\ No newline at end of file
diff --git a/app/en/home/deployment-hosting/overview/page.mdx b/app/en/home/deployment-hosting/overview/page.mdx
new file mode 100644
index 000000000..fce95e99a
--- /dev/null
+++ b/app/en/home/deployment-hosting/overview/page.mdx
@@ -0,0 +1,57 @@
+---
+title: "Hosting Overview"
+description: "Learn about the different ways to host Arcade"
+---
+
+# Hosting Options
+
+The easiest and best way to use Arcade is via the Arcade Cloud service - sign up for free at [https://api.arcade.dev](https://api.arcade.dev). However, you might need to connect your tools to local resources (e.g. a local database or filesystem) or keep data within your own infrastructure. Don't worry, Arcade has you covered via either Arcade Cloud or our on-premise deployment options.
+
+## Arcade Cloud
+
+Arcade Cloud is the default option — sign up and start building immediately:
+
+- **Zero Infrastructure**: No servers or databases to manage
+- **Automatic Updates**: Always access the latest tools and features
+- **Built-in Scaling**: Handles traffic spikes automatically
+- **Free Tier**: Start building without a credit card
+
+### MCP Server Deployment
+
+You can route and manage tool calls from your agents to MCP servers hosted anywhere—on your machine, on your own infrastructure, in a private cloud, or on Arcade Cloud. This allows you to mix the best public tools with your own private tools.
+
+Connect on-premises MCP servers to Arcade Cloud for a hybrid deployment:
+
+- **Private Resources**: Access databases and APIs within your network
+- **Data Control**: Keep sensitive data in your environment
+- **Custom Dependencies**: Use specific runtime requirements or configurations
+- **Compliance**: Meet regulatory requirements while using Arcade's capabilities
+
+See [On-premise MCP Servers](/home/deployment/on-prem-mcp) for more information about how to use your own MCP servers running anywhere, and see [Arcade Deploy](/home/serve-tools/arcade-deploy) to learn how to deploy to Arcade Cloud.
+
+### Customizing Auth
+
+You don't have to self-host Arcade to customize your auth experiences. Arcade Cloud supports a number of auth providers out of the box, and you can provide your own OAuth app credentials to brand your end-user experience. We recommend doing this for all production use cases, so that you can have isolated rate limits with the OAuth service provider and you can give your users a consistent experience when they go through an auth flow.
+You can still use the same tools when you customize your auth, no code changes are required.
+
+See [Customizing Auth](/home/auth-providers) for more information.
+
+### Arcade Cloud Pricing
+
+Arcade Cloud offers a generous free tier to get started:
+
+- **Free Tier**: Includes access to all public MCP Servers and basic features
+- **Usage-Based**: Pay only for what you use as you scale
+
+Visit [https://api.arcade.dev](https://api.arcade.dev) for current pricing details.
+
+## On-Premise Deployments
+
+Fully on-premise deployments of the Arcade platform are available! Arcade can be deployed on Kubernetes via our Helm chart and Docker images as part of our enterprise offering. [Contact us to learn more](/home/contact-us).
+
+The requirements for deploying Arcade on-premise are:
+* Kubernetes cluster (1.30+) (We have tested this helm chart on AKS, GKE, and EKS).
+* Helm 3.x
+* kubectl configured to access your cluster
+* Cert Manager for securing Redis and Postgres and public ingress (see below)
+* Nginx Ingress for accessing Arcade.dev from outside the cluster (see below)
\ No newline at end of file
diff --git a/app/en/home/deployment/_meta.tsx b/app/en/home/deployment/_meta.tsx
deleted file mode 100644
index 33ad997c1..000000000
--- a/app/en/home/deployment/_meta.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { MetaRecord } from "nextra";
-
-const meta: MetaRecord = {
- "*": {
- theme: {
- breadcrumb: true,
- toc: true,
- copyPage: true,
- },
- },
- "arcade-cloud-infra": {
- title: "Arcade Cloud Infrastructure",
- },
- "on-prem-mcp": {
- title: "On-premises MCP servers",
- },
- "engine-configuration": {
- title: "Engine configuration",
- },
-};
-
-export default meta;
diff --git a/app/en/home/evaluate-tools/_meta.tsx b/app/en/home/evaluate-tools/_meta.tsx
deleted file mode 100644
index bc4929294..000000000
--- a/app/en/home/evaluate-tools/_meta.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- "why-evaluate-tools": "Why evaluate tools?",
- "create-an-evaluation-suite": "Create an evaluation suite",
- "run-evaluations": "Run evaluations",
-};
diff --git a/app/en/home/example-agents/page.mdx b/app/en/home/example-agents/page.mdx
new file mode 100644
index 000000000..5d7988312
--- /dev/null
+++ b/app/en/home/example-agents/page.mdx
@@ -0,0 +1,11 @@
+# Example Agents
+
+Explore these example agents to see what's possible with Arcade.
+
+## Turn Confluence into Jira Tickets / Google Docs into Linear Tickets
+
+Example agent that converts Confluence pages into Jira tickets or Google docs into Linear tickets.
+
+## Daily Digest: Summarize your Google Calendar / Email
+
+Example agent that creates daily digests from your Google Calendar and email.
\ No newline at end of file
diff --git a/app/en/home/examples/page.mdx b/app/en/home/examples/page.mdx
new file mode 100644
index 000000000..b9109387a
--- /dev/null
+++ b/app/en/home/examples/page.mdx
@@ -0,0 +1,7 @@
+# Examples (tutorials and sample code)
+
+Practical tutorials and sample code for building with Arcade.
+
+## Overview
+
+Turn Confluence into Jira Tickets, create daily digests, and more.
diff --git a/app/en/home/google-adk/_meta.tsx b/app/en/home/google-adk/_meta.tsx
deleted file mode 100644
index e208ebdc0..000000000
--- a/app/en/home/google-adk/_meta.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- overview: "Overview",
- "use-arcade-tools": "Using Arcade tools",
-};
diff --git a/app/en/home/google-adk/overview/page.mdx b/app/en/home/google-adk/overview/page.mdx
deleted file mode 100644
index c13cc7eaa..000000000
--- a/app/en/home/google-adk/overview/page.mdx
+++ /dev/null
@@ -1,133 +0,0 @@
----
-title: "Arcade with Google ADK overview"
-description: "Comprehensive guide to using Arcade with the Google ADK library"
----
-
-# Arcade with Google ADK
-
-The `google-adk-arcade` package provides a seamless integration between
-[Arcade](https://arcade.dev) and the [Google ADK](https://github.com/google/adk-python/). This integration allows you to enhance your AI agents with powerful Arcade tools including Google Mail, LinkedIn, GitHub, and many more.
-
-## Installation
-
-Install the necessary packages to get started:
-
-```bash
-pip install google-adk-arcade
-```
-
-Make sure you have your Arcade API key ready. [Get an API key](/home/api-keys) if you don't already have one.
-
-## Key features
-
-- **Easy integration** with the Google ADK framework
-- **Access to all Arcade MCP Servers** including Google, GitHub, LinkedIn, X, and more
-- **Create custom tools** with the Arcade Tool SDK
-- **Manage user authentication** for tools that require it
-- **Asynchronous support** compatible with Google's ADK framework
-
-## Basic usage
-
-Here's a simple example of using Arcade tools with OpenAI Agents:
-
-```python
-import asyncio
-
-from arcadepy import AsyncArcade
-from google.adk import Agent, Runner
-from google.adk.artifacts import InMemoryArtifactService
-from google.adk.sessions import InMemorySessionService
-from google.genai import types
-
-from google_adk_arcade.tools import get_arcade_tools
-
-
-async def main():
- app_name = 'my_app'
- user_id = '{arcade_user_id}'
- session_service = InMemorySessionService()
- artifact_service = InMemoryArtifactService()
- client = AsyncArcade()
-
- google_tools = await get_arcade_tools(client, tools=["Gmail.ListEmails"])
-
- # authorize the tools
- for tool in google_tools:
- result = await client.tools.authorize(
- tool_name=tool.name,
- user_id=user_id
- )
- if result.status != "completed":
- print(f"Click this link to authorize {tool.name}:\n{result.url}")
- await client.auth.wait_for_completion(result)
-
- # create the agent
- google_agent = Agent(
- model="gemini-2.0-flash",
- name="google_tool_agent",
- instruction="I can use Google tools to manage an inbox!",
- description="An agent equipped with tools to read Gmail emails."
- tools=google_tools,
- )
-
- #create the session and pass the user ID to the state
- session = await session_service.create_session(
- app_name=app_name, user_id=user_id, state={
- "user_id": user_id,
- }
- )
-
- runner = Runner(
- app_name=app_name,
- agent=google_agent,
- artifact_service=artifact_service,
- session_service=session_service,
- )
-
- user_input = "summarize my latest 3 emails"
- content = types.Content(
- role='user', parts=[types.Part.from_text(text=user_input)]
- )
- for event in runner.run(
- user_id=user_id,
- session_id=session.id,
- new_message=content,
- ):
- if event.content.parts and event.content.parts[0].text:
- print(f'** {event.author}: {event.content.parts[0].text}')
-
-if __name__ == '__main__':
- asyncio.run(main())
-```
-
-## Handling authorization
-
-When a user needs to authorize access to a tool (like Google or GitHub),
-the agent will reply with a URL for the user to visit, which will be displayed
-to the user.
-
-After visiting the URL and authorizing access, the user can run the agent again
-with the same `user_id`, and it will work without requiring re-authorization.
-
-Alternatively, you can authorize the tool before running the agent:
-
-```python
-# authorize the tools
-for tool in google_tools:
- result = await client.tools.authorize(
- tool_name=tool.name,
- user_id=user_id
- )
- if result.status != "completed":
- print(f"Click this link to authorize {tool.name}:\n{result.url}")
- await client.auth.wait_for_completion(result)
-```
-
-## Next steps
-
-Ready to start building with Arcade and OpenAI Agents? Check out these guides:
-
-- [Using Arcade tools](/home/google-adk/use-arcade-tools) - Learn the basics of using Arcade tools with Google ADK
-- [Creating custom tools](/home/build-tools/create-a-mcp-server) - Build your own tools with the Arcade Tool SDK
-
-Enjoy exploring Arcade and building powerful AI-enabled applications!
diff --git a/app/en/home/guides/_meta.tsx b/app/en/home/guides/_meta.tsx
new file mode 100644
index 000000000..ff8b4c563
--- /dev/null
+++ b/app/en/home/guides/_meta.tsx
@@ -0,0 +1 @@
+export default {};
diff --git a/app/en/home/guides/page.mdx b/app/en/home/guides/page.mdx
new file mode 100644
index 000000000..f03d92aef
--- /dev/null
+++ b/app/en/home/guides/page.mdx
@@ -0,0 +1,7 @@
+# Guides
+
+Comprehensive guides for building with Arcade.
+
+## Overview
+
+Learn how to use tools, create tools, and set up authentication.
diff --git a/app/en/home/landing-page.tsx b/app/en/home/landing-page.tsx
index 90a4d2dcb..c06caf948 100644
--- a/app/en/home/landing-page.tsx
+++ b/app/en/home/landing-page.tsx
@@ -40,10 +40,10 @@ export function LandingPage() {
- Welcome to Arcade!
+ Ship AI agents that take action
- Arcade enables your AI agent to securely take real-world actions
- through user-specific permissions, pre-built MCP Servers for
- Gmail, Slack, GitHub, and more. You can also build your own
- agentic tools and MCP servers with our authoring and testing
- suite. Arcade is your tool{" "}
- engine,{" "}
- registry, and{" "}
- runtime.
-
-
- Get started with a 5-minute quickstart.
+ Give your agents the ability to send emails, update calendars,
+ manage files, and interact with any system—not just answer
+ questions. Arcade handles authentication, permissions, and API
+ integrations so your agents can work on behalf of real users,
+ securely.
+ Custom tools Build and deploy your own with our
+ SDK
+
+
+ Built on MCP Model Context Protocol for
+ universal agent compatibility
+
+
-
+
Get Started
@@ -119,9 +127,9 @@ export function LandingPage() {
size="lg"
variant="outline"
>
-
+
- Build a tool
+ Browse the tools
@@ -135,23 +143,23 @@ export function LandingPage() {
}}
>
- Don't write code yourself - let your AI IDE do it for you!
+ Arcade works with your AI IDE:
+
- Learn how to give your coding agents access to Arcade.dev's
- documentation
+ Give your coding agent access to Arcade.dev's documentation
diff --git a/app/en/home/langchain/_meta.tsx b/app/en/home/langchain/_meta.tsx
deleted file mode 100644
index a2708a562..000000000
--- a/app/en/home/langchain/_meta.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- "use-arcade-tools": "Using Arcade tools",
- "user-auth-interrupts": "User authorization",
- "auth-langchain-tools": "Authorizing existing tools",
-};
diff --git a/app/en/home/langchain/use-arcade-tools/page.mdx b/app/en/home/langchain/use-arcade-tools/page.mdx
deleted file mode 100644
index 1ff3964c9..000000000
--- a/app/en/home/langchain/use-arcade-tools/page.mdx
+++ /dev/null
@@ -1,243 +0,0 @@
----
-title: "Use Arcade tools with LangGraph"
-description: "Integrate Arcade tools into your LangGraph applications"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-## Use LangGraph with Arcade
-
-In this guide, let's explore how to integrate Arcade tools into your LangGraph application. Follow the step-by-step instructions below. For complete working examples, see our [Python](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/langchain/langgraph_arcade_minimal.py) and [JavaScript](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/langchain-ts/langgraph-arcade-minimal.ts) examples.
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-
-### Set up your environment
-
-Install the required packages, and ensure your environment variables are set with your Arcade and OpenAI API keys:
-
-
-
-```bash
-pip install langchain-arcade langchain-openai langgraph
-```
-
-
-```bash
-npm install @arcadeai/arcadejs @langchain/openai @langchain/core @langchain/langgraph
-```
-
-
-
-
-### Configure API keys
-
-Provide your Arcade and OpenAI API keys. You can store them in environment variables or directly in your code:
-
-> Need an Arcade API key? Visit the [Get an API key](/home/api-keys) page to create one.
-
-
-
-```python
-import os
-
-arcade_api_key = os.environ.get("ARCADE_API_KEY", "YOUR_ARCADE_API_KEY")
-openai_api_key = os.environ.get("OPENAI_API_KEY", "YOUR_OPENAI_API_KEY")
-```
-
-
-```bash
-ARCADE_API_KEY=
-OPENAI_API_KEY=
-```
-
-
-
-### Create and manage Arcade tools
-
-
-
-Use the ArcadeToolManager to retrieve specific tools or entire MCP Servers:
-
-```python
-from langchain_arcade import ArcadeToolManager
-
-manager = ArcadeToolManager(api_key=arcade_api_key)
-
-# Fetch the "ScrapeUrl" tool from the "Firecrawl" MCP Server
-tools = manager.get_tools(tools=["Firecrawl.ScrapeUrl"])
-print(manager.tools)
-
-# Get all tools from the "Gmail" MCP Server
-tools = manager.get_tools(toolkits=["Gmail"])
-print(manager.tools)
-```
-
-
-Arcade offers methods to convert tools into Zod schemas, which is essential since LangGraph defines tools using Zod. The `toZod` method is particularly useful, as it simplifies this integration and makes it easier to use Arcade's tools with LangGraph. Learn more about Arcade's Zod integration options [here](/home/use-tools/get-tool-definitions#get-zod-tool-definitions).
-```javascript
-import { Arcade } from "@arcadeai/arcadejs";
-import { executeOrAuthorizeZodTool, toZod } from "@arcadeai/arcadejs/lib";
-import { tool } from "@langchain/core/tools";
-
-// Initialize the Arcade client
-const arcade = new Arcade();
-
-// Get the Arcade tools, you can customize the MCP Server (e.g. "github", "notion", "gmail", etc.)
-const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 });
-const arcadeTools = toZod({
- tools: googleToolkit.items,
- client: arcade,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
-});
-// Convert Arcade tools to LangGraph tools
-const tools = arcadeTools.map(({ name, description, execute, parameters }) =>
- tool(execute, {
- name,
- description,
- schema: parameters,
- }),
-);
-console.log(tools);
-```
-
-
-
-
-### Set up the language model and memory
-
-Create an AI model and bind your tools. Use MemorySaver for checkpointing:
-
-
-
-```python
-from langchain_openai import ChatOpenAI
-from langgraph.checkpoint.memory import MemorySaver
-
-model = ChatOpenAI(model="gpt-4o", api_key=openai_api_key)
-bound_model = model.bind_tools(tools)
-
-memory = MemorySaver()
-```
-
-
-```javascript
-import { ChatOpenAI } from "@langchain/openai";
-import { MemorySaver } from "@langchain/langgraph";
-
-const model = new ChatOpenAI({ model: "gpt-4o", apiKey: process.env.OPENAI_API_KEY });
-const boundModel = model.bindTools(tools);
-const memory = new MemorySaver();
-```
-
-
-
-### Create a ReAct-style agent
-
-Use the prebuilt ReAct agent from LangGraph to handle your Arcade tools:
-
-
-```python
-from langgraph.prebuilt import create_react_agent
-
-graph = create_react_agent(model=bound_model, tools=tools, checkpointer=memory)
-```
-
-
-```javascript
-import { createReactAgent } from "@langchain/langgraph/prebuilt";
-
-const graph = createReactAgent({ llm: boundModel, tools, checkpointer: memory });
-```
-
-
-
-### Provide configuration and user query
-
-Supply a basic config dictionary and a user query. Notice that user_id is required for tool authorization:
-
-
-```python
-config = {
- "configurable": {
- "thread_id": "1",
- "user_id": "{arcade_user_id}"
- }
-}
-user_input = {
- "messages": [
- ("user", "List any new and important emails in my inbox.")
- ]
-}
-```
-
-
-```javascript
-const config = {
- configurable: {
- thread_id: "1",
- user_id: "{arcade_user_id}",
- },
- streamMode: "values" as const,
-};
-const user_input = {
- messages: [
- {
- role: "user",
- content: "List any new and important emails in my inbox.",
- },
- ],
-};
-```
-
-
-
-### Stream the response
-
-Stream the assistant's output. If the tool requires authorization, the agent will ask the user to authorize the tool.
-
-
-
-```python
-from langgraph.errors import NodeInterrupt
-
-try:
- for chunk in graph.stream(user_input, config, stream_mode="values"):
- chunk["messages"][-1].pretty_print()
-except NodeInterrupt as exc:
- print(f"\nNodeInterrupt occurred: {exc}")
- print("Please authorize the tool or update the request, then re-run.")
-```
-
-
-```javascript
-try {
- const stream = await graph.stream(user_input, config);
- for await (const chunk of stream) {
- console.log(chunk.messages[chunk.messages.length - 1]);
- }
-} catch (error) {
- console.error("Error streaming response:", error);
-}
-```
-
-
-
-
-## Tips for selecting tools
-
-- **Relevance**: Pick only the tools you need. Avoid using all tools at once.
-- **Avoid conflicts**: Be mindful of duplicate or overlapping functionality.
-
-## Next steps
-
-Now that you have integrated Arcade tools into your LangGraph agent, you can:
-
-- Experiment with different MCP Servers, such as "Math" or "Search."
-- Customize the agent's prompts for specific tasks.
-- Try out other language models and compare their performance.
-
-Enjoy exploring Arcade and building powerful AI-enabled Python applications!
diff --git a/app/en/home/langchain/user-auth-interrupts/page.mdx b/app/en/home/langchain/user-auth-interrupts/page.mdx
deleted file mode 100644
index b03a57735..000000000
--- a/app/en/home/langchain/user-auth-interrupts/page.mdx
+++ /dev/null
@@ -1,373 +0,0 @@
----
-title: "Using Arcade User Auth"
-description: "Build a custom LangGraph that handles tool authorization with Arcade"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-## User Authorization in LangGraph
-
-In this guide, you will create a LangGraph workflow that requires user authorization before running certain Arcade tools. When a tool needs authorization, the graph displays an authorization URL and waits for the user's approval. This ensures that only the tools you explicitly authorize are available to the language model. For complete working examples, see our [Python](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/langchain/langgraph_with_user_auth.py) and [JavaScript](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/langchain-ts/langgraph-with-user-auth.ts) examples.
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-
-### Install the required packages
-
-Set up your environment with the following installations:
-
-
-
-```bash
-pip install langchain-arcade langchain-openai langgraph
-```
-
-
-```bash
-npm install @arcadeai/arcadejs @langchain/openai @langchain/core @langchain/langgraph
-```
-
-
-
-### Configure your Arcade environment
-
-Make sure you have set your Arcade API key (and any other relevant keys) in the environment, or assign them directly in the code:
-
-> Need an Arcade API key? Visit the [Get an API key](/home/api-keys) page to create one.
-
-
-
-```python
-import os
-
-# Import necessary classes and modules
-from langchain_arcade import ArcadeToolManager
-from langchain_openai import ChatOpenAI
-from langgraph.checkpoint.memory import MemorySaver
-from langgraph.graph import END, START, MessagesState, StateGraph
-from langgraph.prebuilt import ToolNode
-from langchain_core.runnables import RunnableConfig
-
-arcade_api_key = os.environ["ARCADE_API_KEY"]
-
-# Initialize the tool manager and fetch tools compatible with langgraph
-tool_manager = ArcadeToolManager(api_key=arcade_api_key)
-tools = tool_manager.get_tools(toolkits=["Gmail"])
-tool_node = ToolNode(tools)
-
-# Create a language model instance and bind it with the tools
-model = ChatOpenAI(model="gpt-4o")
-model_with_tools = model.bind_tools(tools)
-```
-
-Here are the main code elements:
-
-- arcade_api_key is your Arcade key.
-- tool_manager fetches your Arcade tools, for example the "Gmail" MCP Server.
-- tool_node encapsulates these tools for usage in LangGraph.
-- model_with_tools binds your tools to the "gpt-4o" language model, enabling tool calls.
-
-
-
-```javascript
-import { pathToFileURL } from "node:url";
-import { Arcade } from "@arcadeai/arcadejs";
-import { toZod } from "@arcadeai/arcadejs/lib";
-import type { AIMessage } from "@langchain/core/messages";
-import { tool } from "@langchain/core/tools";
-import { MessagesAnnotation, StateGraph } from "@langchain/langgraph";
-import { ToolNode } from "@langchain/langgraph/prebuilt";
-import { ChatOpenAI } from "@langchain/openai";
-
-// Initialize Arcade with API key from environment
-const arcade = new Arcade();
-
-// Replace with your application's user ID (e.g. email address, UUID, etc.)
-const USER_ID = "{arcade_user_id}";
-
-// Initialize tools from Gmail MCP Server
-const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 });
-const arcadeTools = toZod({
- tools: googleToolkit.items,
- client: arcade,
- userId: USER_ID,
-});
-
-// Convert Arcade tools to LangGraph tools
-const tools = arcadeTools.map(({ name, description, execute, parameters }) =>
- tool(execute, {
- name,
- description,
- schema: parameters,
- }),
-);
-
-// Initialize the prebuilt tool node
-const toolNode = new ToolNode(tools);
-
-// Create a language model instance and bind it with the tools
-const model = new ChatOpenAI({
- model: "gpt-4o",
- apiKey: process.env.OPENAI_API_KEY,
-});
-const modelWithTools = model.bindTools(tools);
-```
-
-Here are the main code elements:
-
-- arcade.tools.list fetches your Arcade tools, for example the "Gmail" MCP Server.
-- toZod converts Arcade tools to Zod schemas, which are required by LangGraph.
-- ToolNode encapsulates these tools for usage in LangGraph.
-- modelWithTools binds your tools to the "gpt-4o" language model, enabling tool calls.
-
-
-
-
-### Define the workflow steps
-
-You will create three primary functions to handle AI interaction, tool authorization, and flow control.
-
-
-```python
-# Function to invoke the model and get a response
-def call_agent(state: MessagesState):
- messages = state["messages"]
- response = model_with_tools.invoke(messages)
- # Return the updated message history
- return {"messages": [response]}
-
-
-# Function to determine the next step in the workflow based on the last message
-def should_continue(state: MessagesState):
- if state["messages"][-1].tool_calls:
- for tool_call in state["messages"][-1].tool_calls:
- if tool_manager.requires_auth(tool_call["name"]):
- return "authorization"
- return "tools" # Proceed to tool execution if no authorization is needed
- return END # End the workflow if no tool calls are present
-
-
-# Function to handle authorization for tools that require it
-def authorize(state: MessagesState, config: RunnableConfig | None = None):
- if config is None:
- raise ValueError("Config is required for authorization")
-
- user_id = config["configurable"].get("user_id")
- for tool_call in state["messages"][-1].tool_calls:
- tool_name = tool_call["name"]
- if not tool_manager.requires_auth(tool_name):
- continue
- auth_response = tool_manager.authorize(tool_name, user_id)
- if auth_response.status != "completed":
- # Prompt the user to visit the authorization URL
- print(f"Visit the following URL to authorize: {auth_response.url}")
-
- # Wait for the user to complete the authorization
- # and then check the authorization status again
- tool_manager.wait_for_auth(auth_response.id)
- if not tool_manager.is_authorized(auth_response.id):
- # This stops execution if authorization fails
- raise ValueError("Authorization failed.")
-
- return {"messages": []}
-```
-Explanations for these functions:
-
-- call_agent: Invokes the language model using the latest conversation state.
-- should_continue: Checks the last AI message for any tool calls. If a tool requires authorization, the flow transitions to authorization. Otherwise, it goes straight to tool execution or ends if no tools are called.
-- authorize: Prompts the user to authorize any required tools, blocking until authorization is completed successfully or fails.
-
-
-```javascript
-// Function to check if a tool requires authorization
-async function requiresAuth(toolName: string): Promise<{
- needsAuth: boolean;
- id: string;
- authUrl: string;
-}> {
- const authResponse = await arcade.tools.authorize({
- tool_name: toolName,
- user_id: USER_ID,
- });
- return {
- needsAuth: authResponse.status === "pending",
- id: authResponse.id ?? "",
- authUrl: authResponse.url ?? "",
- };
-}
-
-// Function to invoke the model and get a response
-async function callAgent(
- state: typeof MessagesAnnotation.State,
-): Promise {
- const messages = state.messages;
- const response = await modelWithTools.invoke(messages);
- return { messages: [response] };
-}
-
-// Function to determine the next step in the workflow based on the last message
-async function shouldContinue(
- state: typeof MessagesAnnotation.State,
-): Promise {
- const lastMessage = state.messages[state.messages.length - 1] as AIMessage;
- if (lastMessage.tool_calls?.length) {
- for (const toolCall of lastMessage.tool_calls) {
- const { needsAuth } = await requiresAuth(toolCall.name);
- if (needsAuth) {
- return "authorization";
- }
- }
- return "tools"; // Proceed to tool execution if no authorization is needed
- }
- return "__end__"; // End the workflow if no tool calls are present
-}
-
-// Function to handle authorization for tools that require it
-async function authorize(
- state: typeof MessagesAnnotation.State,
-): Promise {
- const lastMessage = state.messages[state.messages.length - 1] as AIMessage;
- for (const toolCall of lastMessage.tool_calls || []) {
- const toolName = toolCall.name;
- const { needsAuth, id, authUrl } = await requiresAuth(toolName);
- if (needsAuth) {
- // Prompt the user to visit the authorization URL
- console.log(`Visit the following URL to authorize: ${authUrl}`);
-
- // Wait for the user to complete the authorization
- const response = await arcade.auth.waitForCompletion(id);
- if (response.status !== "completed") {
- throw new Error("Authorization failed");
- }
- }
- }
-
- return { messages: [] };
-}
-```
-
-Explanations for these functions:
-
-- requiresAuth: Checks if a tool requires authorization.
-- callAgent: Invokes the language model using the latest conversation state.
-- shouldContinue: Checks the last AI message for any tool calls. If a tool requires authorization, the flow transitions to authorization. Otherwise, it goes straight to tool execution or ends if no tools are called.
-- authorize: Prompts the user to authorize any required tools, blocking until authorization is completed successfully or fails.
-
-
-
-
-### Build and compile your LangGraph workflow
-
-Use StateGraph to assemble the nodes and edges, then compile the graph with a MemorySaver.
-
-
-
-```python
-if __name__ == "__main__":
- # Build the workflow graph using StateGraph
- workflow = StateGraph(MessagesState)
-
- # Add nodes (steps) to the graph
- workflow.add_node("agent", call_agent)
- workflow.add_node("tools", tool_node)
- workflow.add_node("authorization", authorize)
-
- # Define the edges and control flow between nodes
- workflow.add_edge(START, "agent")
- workflow.add_conditional_edges("agent", should_continue, ["authorization", "tools", END])
- workflow.add_edge("authorization", "tools")
- workflow.add_edge("tools", "agent")
-
- # Set up memory for checkpointing the state
- memory = MemorySaver()
-
- # Compile the graph with the checkpointer
- graph = workflow.compile(checkpointer=memory)
-```
-
-
-```javascript
-// Build the workflow graph
-const workflow = new StateGraph(MessagesAnnotation)
- .addNode("agent", callAgent)
- .addNode("tools", toolNode)
- .addNode("authorization", authorize)
- .addEdge("__start__", "agent")
- .addConditionalEdges("agent", shouldContinue, [
- "authorization",
- "tools",
- "__end__",
- ])
- .addEdge("authorization", "tools")
- .addEdge("tools", "agent");
-
-// Compile the graph
-const graph = workflow.compile();
-```
-
-
-
-### Provide inputs and run the graph
-
-Finally, define user-supplied messages, authorization config, and stream the outputs. The graph will pause for any required tool authorization.
-
-
-
-```python
-# Define the input messages from the user
-inputs = {
- "messages": [
- {
- "role": "user",
- "content": "Check and see if I have any emails in my inbox",
- }
- ],
-}
-
-# Configuration with thread and user IDs for authorization purposes
-config = {"configurable": {"thread_id": "4", "user_id": "{arcade_user_id}"}}
-
-# Run the graph and stream the outputs
-for chunk in graph.stream(inputs, config=config, stream_mode="values"):
- # Pretty-print the last message in the chunk
- chunk["messages"][-1].pretty_print()
-```
-
-
-```javascript
-const inputs = {
- messages: [
- {
- role: "user",
- content: "Check and see if I have any important emails in my inbox",
- },
- ],
-};
-// Run the graph and stream the outputs
-const stream = await graph.stream(inputs, { streamMode: "values" });
-for await (const chunk of stream) {
- // Print the last message in the chunk
- console.log(chunk.messages[chunk.messages.length - 1].content);
-}
-```
-
-
-
-In this example:
-
-- The user prompts the agent to check emails.
-- The message triggers a potential need for the "Gmail" MCP Server.
-- If authorization is required, the code prints a URL and waits until you permit the tool call.
-
-
-
-## Next steps
-
-- Experiment with more Arcade MCP Servers for expanded capabilities.
-- Explore advanced authorization logic, such as multi-user or role-based checks.
-- Integrate additional nodes to handle more complex flows or multi-step tasks in your LangGraph.
-
-By combining Arcade's authorization features with stateful management in LangGraph, you can build AI-driven workflows that respect user permissions at every step. Have fun exploring Arcade!
diff --git a/app/en/home/mastra/overview/page.mdx b/app/en/home/mastra/overview/page.mdx
deleted file mode 100644
index e61b3f3c5..000000000
--- a/app/en/home/mastra/overview/page.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Integrating Arcade with Mastra"
-description: "Leverage Arcade's tool ecosystem within your Mastra applications."
----
-
-import { Callout } from "nextra/components";
-
-## Overview: Arcade Tools in Mastra
-
-[Mastra](https://mastra.ai/docs) is an open-source TypeScript agent framework that provides essential primitives for building AI applications. Integrate Arcade's extensive tool ecosystem to enhance your Mastra agents and enable them to interact seamlessly with numerous third-party services.
-
-This integration enables you to:
-
-- **Access a wide range of tools:** Use Arcade's [pre-built tools](/mcp-servers) for GitHub, Google Workspace, Slack, and more directly within your Mastra agent.
-- **Simplify tool management:** Let Arcade handle the complexities of tool discovery, execution, and authentication.
-- **Build sophisticated agents:** Combine Mastra's agent framework (including memory, workflows, and RAG) with Arcade's powerful tool capabilities.
-
-### How it Works
-
-The integration works through three key mechanisms:
-
-1. **Tool Discovery:** Access available tools through a unified API (`arcade.tools.list`).
-2. **Schema Conversion:** Transform Arcade's tool definitions into Mastra-compatible Zod schemas with the `toZodToolSet` utility, enabling seamless integration between the two frameworks without manual schema mapping.
-3. **Execution Delegation:** Seamlessly route tool calls from your Mastra agent through Arcade's API, which handles all the complexities of third-party service authentication and execution.
-
-
- Before starting, obtain an [Arcade API key](/home/api-keys).
-
-
-### Next Steps
-
-- Learn how to [use Arcade tools](/home/mastra/use-arcade-tools) in a Mastra agent
-- Implement [user authentication handling](/home/mastra/user-auth-interrupts) for tools in multi-user applications
diff --git a/app/en/home/mastra/use-arcade-tools/page.mdx b/app/en/home/mastra/use-arcade-tools/page.mdx
deleted file mode 100644
index 1e7b0919f..000000000
--- a/app/en/home/mastra/use-arcade-tools/page.mdx
+++ /dev/null
@@ -1,161 +0,0 @@
----
-title: "Using Arcade tools with Mastra"
-description: "Integrate Arcade tools into your Mastra applications for basic use cases."
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-This guide shows you how to integrate and use Arcade tools within a Mastra agent. For the complete working example, check out our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/mastra).
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-- Basic familiarity with TypeScript and Mastra concepts
-
-### Create a Mastra project
-
-Start by creating a new Mastra project using the official CLI:
-
-```bash
-# Create a new Mastra project
-npx create-mastra@latest my-arcade-agent
-
-# Navigate to the project
-cd my-arcade-agent
-```
-
-For more details on setting up a Mastra project, refer to the [Mastra documentation](https://mastra.ai/docs/getting-started/installation).
-
-### Install Arcade client
-
-Install the Arcade client:
-
-
-
-
-
-```bash
-pnpm add @arcadeai/arcadejs
-```
-
-
-
-
-
-```bash
-npm install @arcadeai/arcadejs
-```
-
-
-
-
-
-```bash
-yarn install @arcadeai/arcadejs
-```
-
-
-
-
-
-### Configure API keys
-
-Set up your environment with the required API keys:
-
-```typescript
-// Set your API keys in your environment variables or .env file
-process.env.ARCADE_API_KEY = "your_arcade_api_key";
-process.env.ANTHROPIC_API_KEY = "your_anthropic_api_key"; // or another supported model provider
-```
-
-### Convert Arcade tools to Mastra tools
-
-Arcade offers methods to convert tools into Zod schemas, which is essential since Mastra defines tools using Zod. The `toZodToolSet` method is particularly useful, as it simplifies this integration and makes it easier to use Arcade's tools with Mastra. Learn more about Arcade's Zod integration options [here](/home/use-tools/get-tool-definitions#get-zod-tool-definitions).
-
-```ts
-import { Arcade } from "@arcadeai/arcadejs";
-import {
- executeOrAuthorizeZodTool,
- toZodToolSet,
-} from "@arcadeai/arcadejs/lib";
-
-// Initialize Arcade
-const arcade = new Arcade();
-
-// Get Gmail MCP Server
-// MCP Server names can be found in the Arcade dashboard via Tools > view > MCP Server or via the CLI `arcade workers list`
-const gmailToolkit = await arcade.tools.list({ toolkit: "Gmail", limit: 30 });
-
-// Get Gmail tools
-export const gmailTools = toZodToolSet({
- tools: gmailToolkit.items,
- client: arcade,
- userId: "", // Your app's internal ID for the user (an email, UUID, etc). It's used internally to identify your user in Arcade
- executeFactory: executeOrAuthorizeZodTool, // Checks if tool is authorized and executes it, or returns authorization URL if needed
-});
-
-```
-
-### Create and configure your Mastra agent
-
-Now create a Mastra agent that uses Arcade tools:
-
-```typescript
-import { Agent } from "@mastra/core/agent";
-import { anthropic } from "@ai-sdk/anthropic";
-
-// Create the Mastra agent with Arcade tools
-export const gmailAgent = new Agent({
- name: "gmailAgent",
- instructions: `You are a Gmail assistant that helps users manage their inbox.
-
-When helping users:
-- Always verify their intent before performing actions
-- Keep responses clear and concise
-- Confirm important actions before executing them
-- Respect user privacy and data security
-
-Use the gmailTools to interact with various Gmail services and perform related tasks.`,
- model: anthropic("claude-3-7-sonnet-20250219"),
- tools: gmailTools,
-});
-```
-
-### Interact with your agent
-
-You can interact with your agent in two main ways:
-
-**1. Using the Mastra Development Playground:**
-
-Start the Mastra development server:
-
-```bash
-npm run dev
-```
-
-This will launch a local development playground, typically accessible at `http://localhost:4111`. Open this URL in your browser, select the `gmailAgent` from the list of available agents, and start chatting with it directly in the UI.
-
-**2. Programmatically:**
-
-Alternatively, you can interact with the agent directly in your code:
-
-```typescript
-// Generate a response from the agent
-const response = await gmailAgent.generate(
- "Read my last email and summarize it in a few sentences",
-);
-console.log(response.text);
-
-// Or stream the response for a more interactive experience
-const stream = await gmailAgent.stream("Send an email to dev@arcade.dev with the subject 'Hello from Mastra'");
-
-for await (const chunk of stream.textStream) {
- process.stdout.write(chunk);
-}
-```
-
-
-
-When running your agent for the first time with tools that require user consent (like Google or Github), the agent will return an authorization reponse (e.g., `{ authorization_required: true, url: '...', message: '...' }`). Your agent's instructions should guide it to present this URL to the user. After the user visits this URL and grants permissions, the tool can be used successfully. See the [Managing user authorization](/home/mastra/user-auth-interrupts) guide for more details on handling authentication flows.
diff --git a/app/en/home/mastra/user-auth-interrupts/page.mdx b/app/en/home/mastra/user-auth-interrupts/page.mdx
deleted file mode 100644
index eea1f31dc..000000000
--- a/app/en/home/mastra/user-auth-interrupts/page.mdx
+++ /dev/null
@@ -1,153 +0,0 @@
----
-title: "Managing user authorization"
-description: "Handle user-specific authorization for Arcade tools in Mastra applications."
----
-
-import { Callout } from "nextra/components";
-
-## Dynamic Tool Loading with Toolsets
-
-Mastra lets you dynamically provide tools to an agent at runtime using toolsets. This approach is essential when integrating Arcade tools in web applications where each user needs their own authentication flow.
-
-### Per-User Tool Authentication in Web Applications
-
-In web applications serving multiple users, implement user-specific authentication flows with these steps:
-
-First, set up your Mastra configuration and agents in separate files:
-
-```typescript
-// @/mastra/index.ts
-import { Mastra } from "@mastra/core";
-import { githubAgent } from "./agents/githubAgent";
-
-// Initialize Mastra
-export const mastra = new Mastra({
- agents: {
- githubAgent,
- },
-});
-```
-
-```typescript
-// @/mastra/agents/githubAgent.ts
-import { Agent } from "@mastra/core/agent";
-import { anthropic } from "@ai-sdk/anthropic";
-
-// Create the agent without tools - we'll add them at runtime
-export const githubAgent = new Agent({
- name: "githubAgent",
- instructions: `You are a GitHub Agent that helps with repository management.
-
- You can help with tasks like:
- - Listing repositories
- - Creating and managing issues
- - Viewing pull requests
- - Managing repository settings
-
- If a tool requires authorization, you will receive an authorization URL.
- When that happens, clearly present this URL to the user and ask them to visit it to grant permissions.`,
- model: anthropic("claude-3-7-sonnet-20250219"),
- // No tools defined here - will be provided dynamically at runtime
-});
-```
-
-Then, create an API endpoint that provides tools dynamically:
-
-```typescript
-// app/api/chat/route.ts
-import { NextRequest, NextResponse } from "next/server";
-import { mastra } from "@/mastra";
-import { Arcade } from "@arcadeai/arcadejs";
-import { getUserSession } from "@/lib/auth"; // Your authentication handling
-import { toZodToolSet } from "@arcadeai/arcadejs/lib";
-import { executeOrAuthorizeZodTool } from "@arcadeai/arcadejs/lib";
-
-export async function POST(req: NextRequest) {
- // Extract request data
- const { messages, threadId } = await req.json();
-
- // Authenticate the user
- const session = await getUserSession(req);
- if (!session) {
- return NextResponse.json({ message: "Unauthorized" }, { status: 401 });
- }
-
- try {
- // Get the agent from Mastra
- const githubAgent = mastra.getAgent("githubAgent");
-
- const arcade = new Arcade();
- const githubToolkit = await arcade.tools.list({ toolkit: "github", limit: 30 });
-
- // Fetch user-specific Arcade tools for GitHub
- const arcadeTools = toZodToolSet({
- tools: githubToolkit.items,
- client: arcade,
- userId: session.user.email,
- executeFactory: executeOrAuthorizeZodTool,
- });
-
- // Stream the response with dynamically provided tools
- const response = await githubAgent.stream(messages, {
- threadId, // Optional: For maintaining conversation context
- resourceId: session.user.id, // Optional: For associating memory with user
- toolChoice: "auto",
- toolsets: {
- arcade: arcadeTools, // Provide tools in a named toolset
- },
- });
-
- // Return streaming response
- return response.toDataStreamResponse();
- } catch (error) {
- console.error("Error processing GitHub request:", error);
- return NextResponse.json(
- { message: "Failed to process request" },
- { status: 500 },
- );
- }
-}
-```
-
-This approach provides several benefits:
-
-- Each user gets their own separate authentication flow with Arcade tools
-- A single agent instance works with multiple user-specific toolsets
-
-The toolsets parameter provides tools only for the current request without modifying the agent's base configuration. This makes it ideal for multi-user applications where each user needs their own secure OAuth flow with Arcade.
-
-## Handling Tool Authorization
-
-When a tool requires user authorization, the agent receives a response with:
-
-```typescript
-{
- authorization_required: true,
- url: "https://auth.arcade.com/...",
- message: "Forward this url to the user for authorization"
-}
-```
-
-Your agent should recognize this pattern and present the URL to the user. To create a better user experience:
-
-- Display the authorization URL as a clickable link in your UI
-- Explain which service needs authorization and why
-- Provide a way for users to retry their request after authorization
-
-## Tips for Selecting Tools
-
-- **Focus on relevance**: Choose tools that directly support your agent's specific purpose
-- **Consider performance**: Some tools may have higher latency than others
-- **Handle errors gracefully**: Implement robust error handling for third-party service failures
-- **Create clear user flows**: Design intuitive authorization experiences
-
-## Next Steps
-
-After integrating Arcade tools into your Mastra agent, you can:
-
-- Add [memory capabilities](https://mastra.ai/docs/agents/agent-memory) to maintain context between interactions
-- Implement [structured workflows](https://mastra.ai/docs/workflows/overview) for complex multi-step operations
-- Enhance your agent with [RAG capabilities](https://mastra.ai/docs/rag/overview) for domain-specific knowledge
-- Set up [logging and tracing](https://mastra.ai/docs/observability/logging) to monitor performance
-
-For more detailed information on Mastra's capabilities, visit the [Mastra documentation](https://mastra.ai/docs).
diff --git a/app/en/home/mcp-gateway-quickstart/page.mdx b/app/en/home/mcp-gateway-quickstart/page.mdx
new file mode 100644
index 000000000..28d4b7d4b
--- /dev/null
+++ b/app/en/home/mcp-gateway-quickstart/page.mdx
@@ -0,0 +1,25 @@
+# MCP Gateway Quickstart
+
+This is a placeholder page for the MCP Gateway quickstart guide.
+
+## Overview
+
+Learn how to call tools in 3rd party agents, apps, or IDEs using the MCP Gateway.
+
+## Prerequisites
+
+- Arcade API key
+- Supported MCP client
+
+## Setup Steps
+
+1. Configure your MCP Gateway
+2. Connect to your client application
+3. Test tool calling functionality
+
+## Supported Clients
+
+- Cursor
+- Claude Desktop
+- Visual Studio Code
+- Other MCP-compatible applications
\ No newline at end of file
diff --git a/app/en/home/mcp-gateways/page.mdx b/app/en/home/mcp-gateways/page.mdx
deleted file mode 100644
index 17cd6f869..000000000
--- a/app/en/home/mcp-gateways/page.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: "MCP Gateways"
-description: "Comprehensive guide to using MCP Gateways"
----
-
-# MCP Gateways
-
-MCP Gateways are a way to connect multiple MCP Servers to your agent, application, or IDE. MCP Gateways allow you to federate the tools from multiple MCP Servers into a single collection for easier management, control, and access. You can mix and match tools from different MCP Servers in the same project, and not all tools from a MCP server need to be available to the same LLM.
-
-## Configure MCP Gateways
-
-To configure an MCP Gateway, go to the [MCP Gateways dashboard](https://api.arcade.dev/dashboard/mcp-gateways) and click on the "Create MCP Gateway" button.
-
-When configuring an MCP Gateway, you can select the tools you want to include in the Gateway from any MCP Servers available to the project:
-
-
-
-The options available when configuring an MCP Gateway are:
-- **Name**: The name of the MCP Gateway. Informative only.
-- **Description**: The description of the MCP Gateway. If set, this information will be returned to the LLM to hint at the purpose of the tools within the MCP Gateway.
-- **Slug**: The slug of the MCP Gateway. This is the URL slug that will be used to access the MCP Gateway. It must be unique.
-- **Allowed Tools**: If set, only the tools in the MCP Servers that are selected will be available to the MCP Gateway. If left blank, all tools from the MCP Servers available to the project will be available through the MCP Gateway.
-
-## How to use MCP Gateways
-
-Any MCP client that supports the Streamable HTTP transport can use an Arcade MCP Gateway. To use an Arcade MCP Gateway, you can use the `https://api.arcade.dev/mcp/` URL in your MCP client. Learn how to use MCP Gateways with:
-* [Cursor](/home/mcp-clients/cursor)
-* [Claude Desktop](/home/mcp-clients/claude-desktop)
-* [Visual Studio Code](/home/mcp-clients/visual-studio-code)
diff --git a/app/en/home/oai-agents/_meta.tsx b/app/en/home/oai-agents/_meta.tsx
deleted file mode 100644
index cdb53979a..000000000
--- a/app/en/home/oai-agents/_meta.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- overview: "Overview",
- "use-arcade-tools": "Using Arcade tools",
- "user-auth-interrupts": "Managing user authorization",
-};
diff --git a/app/en/home/oai-agents/overview/page.mdx b/app/en/home/oai-agents/overview/page.mdx
deleted file mode 100644
index 27eaa1f72..000000000
--- a/app/en/home/oai-agents/overview/page.mdx
+++ /dev/null
@@ -1,184 +0,0 @@
----
-title: "Arcade with OpenAI Agents overview"
-description: "Comprehensive guide to using Arcade with the OpenAI Agents library"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-# Arcade with OpenAI Agents
-
-Arcade provides seamless integration with the [OpenAI Agents Library](https://github.com/openai/openai-python) and [OpenAI Agents JS](https://openai.github.io/openai-agents-js/), allowing you to enhance your AI agents with powerful tools including Gmail, LinkedIn, GitHub, and many more. This integration is available through the `agents-arcade` package for Python and our [JavaScript client library](https://github.com/ArcadeAI/arcade-js).
-
-## Installation
-
-Install the necessary packages to get started:
-
-
-
-
-```bash
-pip install agents-arcade arcadepy
-```
-
-
-
-
-
-```bash
-npm install @openai/agents @arcadeai/arcadejs
-```
-
-
-
-
-
-Make sure you have your Arcade API key ready. [Get an API key](/home/api-keys) if you don't already have one.
-
-## Key features
-
-- **Easy integration** with the OpenAI Agents framework
-- **Access to all Arcade MCP Servers** including Google, GitHub, LinkedIn, X, and more
-- **Create custom tools** with the Arcade Tool SDK
-- **Manage user authentication** for tools that require it
-- **Asynchronous support** compatible with OpenAI's Agent framework
-
-## Basic usage
-
-Here's a simple example of using Arcade tools with OpenAI Agents:
-
-
-
-
-```python
-from agents import Agent, Runner
-from arcadepy import AsyncArcade
-from agents_arcade import get_arcade_tools
-from agents_arcade.errors import AuthorizationError
-
-async def main():
- # Initialize the Arcade client
- client = AsyncArcade()
-
- # Get tools from the "gmail" MCP Server
- tools = await get_arcade_tools(client, toolkits=["gmail"])
-
- # Create an agent with Gmail tools
- google_agent = Agent(
- name="Gmail agent",
- instructions="You are a helpful assistant that can assist with Gmail API calls.",
- model="gpt-4o-mini",
- tools=tools,
- )
-
- try:
- # Run the agent with a unique user_id for authorization
- result = await Runner.run(
- starting_agent=google_agent,
- input="What are my latest emails?",
- context={"user_id": "{arcade_user_id}"},
- )
- print("Final output:\n\n", result.final_output)
- except AuthorizationError as e:
- print("Please Login to Google:", e)
-
-if __name__ == "__main__":
- import asyncio
- asyncio.run(main())
-```
-
-
-
-
-
-Check out the complete working example in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts/src/index.ts).
-
-```javascript
-import Arcade from "@arcadeai/arcadejs";
-import { executeOrAuthorizeZodTool, toZod } from "@arcadeai/arcadejs/lib";
-import { Agent, run, tool } from "@openai/agents";
-
-// 1) Initialize Arcade client
-const client = new Arcade();
-
-// 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents
-const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 });
-const tools = toZod({
- tools: googleToolkit.items,
- client,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
- executeFactory: executeOrAuthorizeZodTool,
-}).map(tool);
-
-// 3) Create a new agent with the Gmail MCP Server
-const googleAgent = new Agent({
- name: "Gmail agent",
- instructions:
- "You are a helpful assistant that can assist with Google API calls.",
- model: "gpt-4o-mini",
- tools,
-});
-
-// 4) Run the agent
-const result = await run(googleAgent, "What are my latest emails?");
-
-// 5) Print the result
-console.log(result.finalOutput);
-```
-
-
-
-
-
-## Handling authorization
-
-
-
-
-When a user needs to authorize access to a tool (like Google or GitHub), the agent will raise an `AuthorizationError` with a URL for the user to visit:
-
-```python
-try:
- # Run agent code
- # ...
-except AuthorizationError as e:
- # Display the authorization URL to the user
- print(f"Please visit this URL to authorize: {e}")
-```
-
-
-
-
-
-When a user needs to authorize access to a tool (like Google or GitHub), the agent will show a message like this:
-
-```bash
-[Authorize Gmail Access](https://accounts.google.com/o/oauth2/v2/auth?access_type=offline...)
-Once you have authorized access, I can retrieve your latest emails.
-```
-
-
-
-
-After visiting the URL and authorizing access, the user can run the agent again with the same `user_id`, and it will work without requiring re-authorization.
-
-## Available MCP Servers
-
-Arcade provides a variety of MCP Servers you can use with your agents:
-
-- **Google Suite**: Gmail, Calendar, Drive, Docs
-- **Social Media**: LinkedIn, X
-- **Development**: GitHub
-- **Web**: Web search, content extraction
-- **And more**: Weather, financial data, etc.
-
-For a full list of available MCP Servers, visit the [Arcade MCP Servers](/mcp-servers) documentation.
-
-## Next steps
-
-Ready to start building with Arcade and OpenAI Agents? Check out these guides:
-
-- [Using Arcade tools](/home/oai-agents/use-arcade-tools) - Learn the basics of using Arcade tools with OpenAI Agents
-- [Managing user authorization](/home/oai-agents/user-auth-interrupts) - Handle tool authorization efficiently
-- [Creating custom tools](/home/build-tools/create-a-mcp-server) - Build your own tools with the Arcade Tool SDK
-
-Enjoy exploring Arcade and building powerful AI-enabled applications!
diff --git a/app/en/home/oai-agents/use-arcade-tools/page.mdx b/app/en/home/oai-agents/use-arcade-tools/page.mdx
deleted file mode 100644
index 0b098f28c..000000000
--- a/app/en/home/oai-agents/use-arcade-tools/page.mdx
+++ /dev/null
@@ -1,346 +0,0 @@
----
-title: "Use Arcade with OpenAI Agents"
-description: "Integrate Arcade tools into your OpenAI Agents applications"
----
-import { Steps, Tabs, Callout } from "nextra/components";
-
-## Use Arcade with OpenAI Agents
-
-In this guide, let's explore how to integrate Arcade tools into your OpenAI Agents application. Follow the step-by-step instructions below.
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-
-### Set up your environment
-
-Install the required packages, and ensure your environment variables are set with your Arcade API key:
-
-
-
-
-
-```bash
-pip install agents-arcade arcadepy
-```
-
-
-
-
-
-```bash
-npm install @openai/agents @arcadeai/arcadejs
-```
-
-
-
-
-
-### Configure API keys
-
-Provide your Arcade API key. You can store it in environment variables or directly in your code:
-
-> Need an Arcade API key? Visit the [Get an API key](/home/api-keys) page to create one.
-
-
-
-
-```python
-import os
-
-os.environ["ARCADE_API_KEY"] = "YOUR_ARCADE_API_KEY"
-# Or set it directly when initializing the client
-```
-
-
-
-
-
-```bash
-# In your .env file
-ARCADE_API_KEY=YOUR_ARCADE_API_KEY
-```
-
-
-
-
-
-
-
-### Create and manage Arcade tools
-
-
-
-
-Use the `get_arcade_tools` function to retrieve tools from specific MCP Servers:
-
-```python
-from arcadepy import AsyncArcade
-from agents_arcade import get_arcade_tools
-
-# Initialize the Arcade client
-client = AsyncArcade()
-
-# Get all tools from the "Gmail" MCP Server
-tools = await get_arcade_tools(client, toolkits=["gmail"])
-
-# You can request multiple MCP Servers at once
-tools = await get_arcade_tools(client, toolkits=["gmail", "github", "linkedin"])
-
-# You can request specific tools
-tools = await get_arcade_tools(client, tools=["Gmail_ListEmails", "Slack_ListUsers", "Slack_SendDmToUser"])
-```
-
-
-
-
-
-```javascript
-import Arcade from '@arcadeai/arcadejs';
-import { executeOrAuthorizeZodTool, toZod } from "@arcadeai/arcadejs/lib";
-import { tool } from '@openai/agents';
-
-const client = new Arcade();
-
-// Option 1: Get tools from a single MCP Server
-const googleTools = await client.tools.list({ toolkit: "gmail", limit: 30 });
-const toolsFromGoogle = googleTools.items;
-
-// Option 2: Get tools from multiple MCP Servers
-const [google, github, linkedin] = await Promise.all([
- client.tools.list({ toolkit: "gmail", limit: 30 }),
- client.tools.list({ toolkit: "github", limit: 30 }),
- client.tools.list({ toolkit: "linkedin", limit: 30 })
-]);
-const toolsFromMultiple = [...google.items, ...github.items, ...linkedin.items];
-
-// Option 3: Get specific tools by name
-const specificTools = await Promise.all([
- client.tools.get("Gmail_ListEmails"),
- client.tools.get("Slack_ListUsers"),
- client.tools.get("Slack_SendDmToUser"),
-]);
-
-// Convert any of the above to OpenAI Agents format
-const convertToAgents = (arcadeTools) => {
- return toZod({
- tools: arcadeTools,
- client,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
- executeFactory: executeOrAuthorizeZodTool,
- }).map(tool);
-};
-
-// Use with any of the options above
-const tools = convertToAgents(toolsFromGoogle); // or toolsFromMultiple or specificTools
-```
-
-
-
-
-
-### Set up the agent with Arcade tools
-
-Create an agent and provide it with the Arcade tools:
-
-
-
-
-```python
-from agents import Agent, Runner
-
-# Create an agent with Gmail tools
-google_agent = Agent(
- name="Gmail agent",
- instructions="You are a helpful assistant that can assist with Google API calls.",
- model="gpt-4o-mini",
- tools=tools,
-)
-```
-
-
-
-
-
-```javascript
-import { Agent, Runner, tool } from '@openai/agents';
-
-// Create an agent with Arcade tools
-const googleAgent = new Agent({
- name: "Gmail agent",
- instructions: "You are a helpful assistant that can assist with Google API calls.",
- model: "gpt-4o-mini",
- tools
-});
-```
-
-
-
-
-### Run the agent
-
-
-
-
-Run the agent, providing a user_id for tool authorization:
-
-```python
-try:
- result = await Runner.run(
- starting_agent=google_agent,
- input="What are my latest emails?",
- context={"user_id": "{arcade_user_id}"},
- )
- print("Final output:\n\n", result.final_output)
-except AuthorizationError as e:
- print("Please Login to Google:", e)
-```
-
-
-
-
-```javascript
-const result = await run(googleAgent, "What are my latest emails?");
-```
-
-
-
-
-
-
-### Handle authentication
-
-
-
-
-If a tool requires authorization, an `AuthorizationError` will be raised with an authorization URL:
-
-```python
-from agents_arcade.errors import AuthorizationError
-
-try:
- # Run agent code from earlier examples
- # ...
-except AuthorizationError as e:
- print(f"Please visit this URL to authorize: {e}")
- # The URL contained in the error will take the user to the authorization page
-```
-
-
-
-
-
-If a tool requires authorization, the agent will show a message like this:
-
-```bash
-[Authorize Gmail Access](https://accounts.google.com/o/oauth2/v2/auth?access_type=offline...)
-Once you have authorized access, I can retrieve your latest emails.
-```
-
-
-
-
-
-### Complete example
-
-Here's a complete example putting everything together:
-
-
-
-
-```python
-from agents import Agent, Runner
-from arcadepy import AsyncArcade
-
-from agents_arcade import get_arcade_tools
-from agents_arcade.errors import AuthorizationError
-
-
-async def main():
- client = AsyncArcade()
- tools = await get_arcade_tools(client, toolkits=["gmail"])
-
- google_agent = Agent(
- name="Google agent",
- instructions="You are a helpful assistant that can assist with Google API calls.",
- model="gpt-4o-mini",
- tools=tools,
- )
-
- try:
- result = await Runner.run(
- starting_agent=google_agent,
- input="What are my latest emails?",
- context={"user_id": "{arcade_user_id}"},
- )
- print("Final output:\n\n", result.final_output)
- except AuthorizationError as e:
- print("Please Login to Google:", e)
-
-
-if __name__ == "__main__":
- import asyncio
-
- asyncio.run(main())
-```
-
-
-
-
-
-Check out the complete working example in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts/src/index.ts).
-
-```javascript
-import Arcade from '@arcadeai/arcadejs';
-import { executeOrAuthorizeZodTool, toZod } from "@arcadeai/arcadejs/lib";
-import { Agent, run, tool } from '@openai/agents';
-
-// 1) Initialize Arcade client
-const client = new Arcade();
-
-// 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents
-const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 });
-const tools = toZod({
- tools: googleToolkit.items,
- client,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
- executeFactory: executeOrAuthorizeZodTool,
-}).map(tool);
-
-// 3) Create a new agent with the Gmail MCP Server
-const googleAgent = new Agent({
- name: "Gmail agent",
- instructions: "You are a helpful assistant that can assist with Google API calls.",
- model: "gpt-4o-mini",
- tools
-});
-
-// 4) Run the agent
-const result = await run(googleAgent, "What are my latest emails?");
-
-// 5) Print the result
-console.log(result.finalOutput);
-```
-
-
-
-
-
-
-## Tips for selecting tools
-
-- **Relevance**: Pick only the tools you need. Avoid using all tools at once.
-- **User identification**: Always provide a unique and consistent `user_id` for each user. Use your internal or database user ID, not something entered by the user.
-
-## Next steps
-
-Now that you have integrated Arcade tools into your OpenAI Agents application, you can:
-
-- Experiment with different MCP Servers, such as "Github" or "LinkedIn"
-- Customize the agent's instructions for specific tasks
-- Try out multi-agent systems using different Arcade tools
-- Build your own custom tools with the Arcade Tool SDK
-
-Enjoy exploring Arcade and building powerful AI-enabled Python applications!
diff --git a/app/en/home/oai-agents/user-auth-interrupts/page.mdx b/app/en/home/oai-agents/user-auth-interrupts/page.mdx
deleted file mode 100644
index d76bc6b63..000000000
--- a/app/en/home/oai-agents/user-auth-interrupts/page.mdx
+++ /dev/null
@@ -1,442 +0,0 @@
----
-title: "Managing user authorization"
-description: "Handle tool authorization with Arcade and OpenAI Agents"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-
-## User authorization with OpenAI Agents
-
-In this guide, you will learn how to handle user authorization for Arcade tools in your OpenAI Agents application. When a tool requires authorization, the agent will raise an `AuthorizationError` with a URL for the user to visit and grant permissions.
-
-
-
-### Prerequisites
-
-- [Obtain an Arcade API key](/home/api-keys)
-
-### Install the required packages
-
-Set up your environment with the following installations:
-
-
-
-
-```bash
-pip install agents-arcade arcadepy
-```
-
-
-
-
-
-```bash
-npm install @openai/agents @arcadeai/agents-arcade
-```
-
-
-
-
-
-### Configure your Arcade environment
-
-Make sure you have set your Arcade API key in the environment, or assign it directly in the code:
-
-> Need an Arcade API key? Visit the [Get an API key](/home/api-keys) page to create one.
-
-
-
-
-```python
-import os
-from arcadepy import AsyncArcade
-from agents import Agent, Runner
-from agents_arcade import get_arcade_tools
-from agents_arcade.errors import AuthorizationError
-
-# Set your API key
-os.environ["ARCADE_API_KEY"] = "YOUR_ARCADE_API_KEY"
-
-# Initialize the Arcade client
-client = AsyncArcade()
-```
-
-
-
-
-
-Add your API key to your environment variables:
-
-```bash
-# In your .env file
-ARCADE_API_KEY=YOUR_ARCADE_API_KEY
-```
-
-```javascript
-import Arcade from '@arcadeai/arcadejs';
-import { isAuthorizationRequiredError, toZod } from "@arcadeai/arcadejs/lib";
-import { Agent, run, tool } from '@openai/agents';
-
-const client = new Arcade();
-```
-
-
-
-
-### Fetch Arcade tools
-
-Get the tools you need for your agent. In this example, we'll use GitHub tools:
-
-
-
-
-```python
-# Get GitHub tools for this example
-tools = await get_arcade_tools(client, toolkits=["github"])
-
-# Create an agent with GitHub tools
-github_agent = Agent(
- name="GitHub agent",
- instructions="You are a helpful assistant that can assist with GitHub API calls.",
- model="gpt-4o-mini",
- tools=tools,
-)
-```
-
-
-
-
-
-```javascript
-const githubToolkit = await client.tools.list({ toolkit: "github", limit: 30 });
-const arcadeTools = toZod({
- tools: githubToolkit.items,
- client,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
-})
-```
-
-
-
-
-
-
-### Handle authorization errors
-
-
-
-
-When a user needs to authorize access to a tool, the agent will raise an `AuthorizationError`. You can handle it like this:
-
-```python
-try:
- result = await Runner.run(
- starting_agent=github_agent,
- input="Star the arcadeai/arcade-ai repo",
- # Pass a unique user_id for authentication
- context={"user_id": "{arcade_user_id}"},
- )
- print("Final output:\n\n", result.final_output)
-except AuthorizationError as e:
- # Display the authorization URL to the user
- print(f"Please Login to GitHub: {e}")
- # The error contains the authorization URL that the user should visit
-```
-
-
-
-
-
-Choose how to handle authorization errors based on your needs:
-
-**Default behavior (throws errors):**
-```javascript
-const arcadeTools = toZod({
- tools: githubToolkit.items,
- client,
- userId: "", // Replace with your user ID
-});
-```
-
-Use this when you want to handle authorization flow yourself with custom logic.
-
-**Auto-handle authorization (recommended):**
-```javascript
-import { executeOrAuthorizeZodTool } from "@arcadeai/arcadejs/lib";
-
-const arcadeTools = toZod({
- tools: githubToolkit.items,
- client,
- userId: "", // Replace with your user ID
- executeFactory: executeOrAuthorizeZodTool,
-});
-```
-
-This automatically returns authorization URLs instead of throwing errors.
-
-**Custom error handling:**
-
-```javascript
-import { isAuthorizationRequiredError } from "@arcadeai/arcadejs/lib";
-
-const tools = arcadeTools.map((arcadeTool) => {
- return tool({
- ...arcadeTool,
- errorFunction: async (_, error) => {
- if (error instanceof Error && isAuthorizationRequiredError(error)) {
- const response = await client.tools.authorize({
- tool_name: arcadeTool.name,
- user_id: "",
- });
- return `Please login to Google: ${response.url}`;
- }
- return "Error executing tool"
- }
- })
-});
-```
-
-
-
-
-
-### Wait for authorization completion
-
-You can also wait for the user to complete the authorization before continuing:
-
-
-
-
-```python
-from arcadepy import AsyncArcade
-import asyncio
-
-client = AsyncArcade()
-
-async def handle_auth_flow(auth_id):
- # Display a message to the user
- print("Please visit the authorization URL in your browser")
-
-
- # Wait for the user to authenticate
- await client.auth.wait_for_completion(auth_id)
-
- # Check if authorization was successful
- if await is_authorized(auth_id):
- print("Authorization successful! You can now use the tool.")
- return True
- else:
- print("Authorization failed or timed out.")
- return False
-
-# In your main function
-try:
- # Run agent code
- # ...
-except AuthorizationError as e:
- auth_id = e.auth_id
- if await handle_auth_flow(auth_id):
- # Try running the agent again
- result = await Runner.run(
- starting_agent=github_agent,
- input="Star the arcadeai/arcade-ai repo",
- context={"user_id": "{arcade_user_id}"},
- )
- print("Final output:\n\n", result.final_output)
-```
-
-
-
-
-
-To wait for authorization completion, follow this approach:
-
-1. Throw the error to the agent
-2. Catch and handle the error while waiting for completion
-
-
-
-```javascript
-const tools = arcadeTools.map((arcadeTool) => {
- return tool({
- ...arcadeTool,
- errorFunction: (_, error) => { throw error } // Throw the error to the agent for handling
- })
-});
-
-while (true) {
- try {
- const result = await run(googleAgent, "What are my latest emails?");
- console.log(result.finalOutput);
- } catch (error) {
- // Catch the authorization error and wait for completion
- if (error instanceof Error && isAuthorizationRequiredError(error)) {
- const response = await client.tools.authorize({
- tool_name: "Gmail_ListEmails",
- user_id: "",
- });
- if (response.status !== "completed") {
- console.log(`Please complete the authorization challenge in your browser: ${response.url}`);
- }
-
- // Wait for the authorization to complete
- await client.auth.waitForCompletion(response);
- console.log("Authorization completed, retrying...");
- }
- }
- }
-```
-
-
-
-
-
-
-
-### Complete example
-
-Here's a full example that demonstrates the authorization flow with waiting for authentication:
-
-
-
-
-```python
-from arcadepy.auth import wait_for_authorization_completion
-
-import time
-
-from agents import Agent, Runner
-from arcadepy import AsyncArcade
-
-from agents_arcade import get_arcade_tools
-from agents_arcade.errors import AuthorizationError
-
-
-async def main():
- client = AsyncArcade()
- # Use the "github" MCP Server for this example
- tools = await get_arcade_tools(client, toolkits=["github"])
-
- github_agent = Agent(
- name="GitHub agent",
- instructions="You are a helpful assistant that can assist with GitHub API calls.",
- model="gpt-4o-mini",
- tools=tools,
- )
-
- user_id = "{arcade_user_id}" # Make sure to use a unique user ID
-
- while True:
- try:
- result = await Runner.run(
- starting_agent=github_agent,
- input="Star the arcadeai/arcade-ai repo",
- # Pass the user_id for auth
- context={"user_id": user_id},
- )
- print("Final output:\n\n", result.final_output)
- break # Exit the loop if successful
-
- except AuthorizationError as e:
- auth_url = str(e)
- print(f"{auth_url}. Please authenticate to continue.")
-
- # Wait for the user to authenticate
- await client.auth.wait_for_completion(e.result.id)
-
-
-if __name__ == "__main__":
- import asyncio
-
- asyncio.run(main())
-```
-
-
-
-
-
-Check out the complete working example in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts/src/waitForCompletion.ts).
-
-```javascript
-import Arcade from '@arcadeai/arcadejs';
-import { isAuthorizationRequiredError, toZod } from "@arcadeai/arcadejs/lib";
-import { Agent, run, tool } from '@openai/agents';
-
-async function main() {
- // 1) Initialize Arcade client
- const client = new Arcade();
-
- // 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents
- const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 });
- const tools = toZod({
- tools: googleToolkit.items,
- client,
- userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.)
- }).map(tool);
-
- // 3) Create a new agent with the Gmail MCP Server
- const googleAgent = new Agent({
- name: "Gmail agent",
- instructions: "You are a helpful assistant that can assist with Google API calls.",
- model: "gpt-4o-mini",
- tools
- });
-
- // 4) Run the agent, if authorization is required, wait for it to complete and retry
- while (true) {
- try {
- const result = await run(googleAgent, "What are my latest emails?");
- console.log(result.finalOutput);
- break; // Exit the loop if the result is successful
- } catch (error) {
- if (error instanceof Error && isAuthorizationRequiredError(error)) {
- const response = await client.tools.authorize({
- tool_name: "Gmail_ListEmails",
- user_id: "",
- });
- if (response.status !== "completed") {
- console.log(`Please complete the authorization challenge in your browser: ${response.url}`);
- }
-
- // Wait for the authorization to complete
- await client.auth.waitForCompletion(response);
- console.log("Authorization completed, retrying...");
- }
- }
- }
-}
-
-main();
-```
-
-
-This example handles the authentication flow by:
-
-1. Attempting to run the agent
-2. Catching any AuthorizationError
-3. Open the authentication URL in a browser
-4. Waiting for the user to complete authentication
-5. Retrying the operation after a wait period
-
-
-
-
-## Authentication persistence
-
-Once a user authorizes with an auth provider, Arcade will remember the authorization for that specific user_id and MCP Server. You don't need to re-authorize each time you run the agent.
-
-Key points to remember:
-
-- Always use a consistent and unique `user_id` for each user
-- Store the `user_id` securely in your application
-- Different MCP Servers require separate authorization flows
-- Authorization tokens are managed by Arcade, not your application
-
-## Next steps
-
-- Build a user interface to handle authorization flows smoothly
-- Explore other Arcade MCP Servers like Google, LinkedIn, or X
-- Create multi-step workflows with multiple tools and authorizations
-- Learn to build your own custom tools with the Arcade Tool SDK
-
-By handling Arcade's authorization flow correctly, you can build AI-driven applications that securely integrate with various services while respecting user permissions. Have fun exploring Arcade!
diff --git a/app/en/home/observability/_meta.tsx b/app/en/home/observability/_meta.tsx
new file mode 100644
index 000000000..6ef2a0bed
--- /dev/null
+++ b/app/en/home/observability/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ index: "Overview",
+ platforms: "Platforms",
+};
diff --git a/app/en/home/observability/page.mdx b/app/en/home/observability/page.mdx
new file mode 100644
index 000000000..6df5c9f48
--- /dev/null
+++ b/app/en/home/observability/page.mdx
@@ -0,0 +1,22 @@
+# Observability
+
+Learn how to monitor, trace, and gain insights into your Arcade-powered AI agents and tool executions.
+
+## Overview
+
+Observability is crucial for understanding the behavior of your AI agents, monitoring tool performance, and debugging issues in production. Arcade provides comprehensive observability features that help you track agent actions, tool executions, and system performance.
+
+## Key Features
+
+- **Tool Execution Tracing**: Monitor every tool call made by your agents
+- **Performance Metrics**: Track response times, success rates, and error patterns
+- **Agent Behavior Insights**: Understand how your agents make decisions and use tools
+- **Integration Support**: Connect with popular observability platforms
+
+## Getting Started
+
+Choose from our supported observability platforms or implement custom monitoring solutions using Arcade's observability APIs.
+
+## Next Steps
+
+Explore the platforms section to learn how to integrate Arcade with your preferred observability tools.
\ No newline at end of file
diff --git a/app/en/home/observability/platforms/_meta.tsx b/app/en/home/observability/platforms/_meta.tsx
new file mode 100644
index 000000000..22b2653f5
--- /dev/null
+++ b/app/en/home/observability/platforms/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "quickstarts-placeholder":
+ "Placeholder for Quickstarts of various observability platforms",
+};
diff --git a/app/en/home/observability/platforms/quickstarts-placeholder/page.mdx b/app/en/home/observability/platforms/quickstarts-placeholder/page.mdx
new file mode 100644
index 000000000..6f3cdb56d
--- /dev/null
+++ b/app/en/home/observability/platforms/quickstarts-placeholder/page.mdx
@@ -0,0 +1,7 @@
+# Placeholder for Quickstarts of various observability platforms
+
+Documentation coming soon.
+
+## Overview
+
+This section will contain detailed information about integrating Arcade with various observability platforms.
\ No newline at end of file
diff --git a/app/en/home/python-quickstart/page.mdx b/app/en/home/python-quickstart/page.mdx
new file mode 100644
index 000000000..04ef6b4c2
--- /dev/null
+++ b/app/en/home/python-quickstart/page.mdx
@@ -0,0 +1,38 @@
+# Python Quickstart
+
+This is a placeholder page for the Python quickstart guide.
+
+## Overview
+
+Get started with Arcade tools in Python applications quickly and easily.
+
+## Prerequisites
+
+- Python 3.8 or higher
+- Arcade API key
+- Virtual environment (recommended)
+
+## Installation
+
+```bash
+pip install arcade-ai
+```
+
+## Quick Setup
+
+```python
+import arcade
+
+# Initialize the client
+client = arcade.Arcade(api_key="your-api-key")
+
+# Call a tool
+result = client.tools.call("example-tool", {"param": "value"})
+print(result)
+```
+
+## Next Steps
+
+- [Tool Calling Introduction](/en/home/tool-calling-intro)
+- [Authorized Tool Calling](/en/home/authorized-tool-calling)
+- [Error Handling](/en/home/error-handling)
\ No newline at end of file
diff --git a/app/en/home/quickstart/page.mdx b/app/en/home/quickstart/page.mdx
deleted file mode 100644
index 212aba924..000000000
--- a/app/en/home/quickstart/page.mdx
+++ /dev/null
@@ -1,206 +0,0 @@
----
-title: "Start using Arcade's Hosted Tools"
-description: "Learn how to get started with Arcade's Hosted Tools"
----
-
-import { Steps, Tabs, Callout } from "nextra/components";
-import { SignupLink } from "@/app/_components/analytics";
-
-# Arcade's Hosted Tools Quickstart
-
-Arcade gives your AI agents the power to act. With Arcade's Hosted Tools, your AI can send Gmail, update Notion, message in Slack, and more.
-
-
-
-
-Install and use the Arcade client to call Arcade Hosted Tools.
-
-
-
-
-
-- An Arcade account
-- An [Arcade API key](/home/api-keys)
-- The [`uv` package manager](https://docs.astral.sh/uv/getting-started/installation/)
-
-
-
-
-
-- Install the Arcade client
-- Execute your first tool using the Arcade client
-- Authorize a tool to star a GitHub repository on your behalf
-
-
-
-
-
-
-### Install the Arcade client
-
-
-
-
- In your terminal, run the following command to install the Python client package `arcadepy`:
-
-```bash
-uv pip install arcadepy
-```
-
-
-
-
- In your terminal, run the following command to install the JavaScript client package `@arcadeai/arcadejs`:
-
-```bash
-npm install @arcadeai/arcadejs
-```
-
-
-
-
-
-### Instantiate and use the client
-
-
-
-
-
-Create a new script called `example.py`:
-
-```python filename="example.py"
-from arcadepy import Arcade
-
-# You can also set the `ARCADE_API_KEY` environment variable instead of passing it as a parameter.
-
-client = Arcade(api_key="{arcade_api_key}")
-
-# Arcade needs a unique identifier for your application user (this could be an email address, a UUID, etc).
-
-# In this example, use the email you used to sign up for Arcade.dev:
-
-user_id = "{arcade_user_id}"
-
-# Let's use the `Math.Sqrt` tool from the Arcade Math MCP Server to get the square root of a number.
-
-response = client.tools.execute(
- tool_name="Math.Sqrt",
- input={"a": '625'},
- user_id=user_id,
-)
-
-print(f"The square root of 625 is {response.output.value}")
-
-# Now, let's use a tool that requires authentication to star a GitHub repository
-
-auth_response = client.tools.authorize(
-tool_name="GitHub.SetStarred",
-user_id=user_id,
-)
-
-if auth_response.status != "completed":
- print(f"Click this link to authorize: `{auth_response.url}`. The process will continue once you have authorized the app." ) # Wait for the user to authorize the app
- client.auth.wait_for_completion(auth_response.id);
-
-response = client.tools.execute(
- tool_name="GitHub.SetStarred",
- input={
- "owner": "ArcadeAI",
- "name": "arcade-mcp",
- "starred": True,
- },
- user_id=user_id,
-)
-
-print(response.output.value)
-
-```
-
-
-
-
-
-Create a new script called `example.mjs`:
-
-```javascript filename="example.mjs"
-import Arcade from "@arcadeai/arcadejs";
-
-// You can also set the `ARCADE_API_KEY` environment variable instead of passing it as a parameter.
-const client = new Arcade({
- apiKey: "{arcade_api_key}",
-});
-
-// Arcade needs a unique identifier for your application user (this could be an email address, a UUID, etc).
-// In this example, use the email you used to sign up for Arcade.dev:
-let userId = "{arcade_user_id}";
-
-// Let's use the `Math.Sqrt` tool from the Arcade Math MCP Server to get the square root of a number.
-const response_sqrt = await client.tools.execute({
- tool_name: "Math.Sqrt",
- input: { a: "625" },
- user_id: userId,
-});
-
-console.log(response_sqrt.output.value);
-
-// Now, let's use a tool that requires authentication
-
-const authResponse = await client.tools.authorize({
- tool_name: "GitHub.SetStarred",
- user_id: userId,
-});
-
-if (authResponse.status !== "completed") {
- console.log(
- `Click this link to authorize: \`${authResponse.url}\`. The process will continue once you have authorized the app.`
- );
- // Wait for the user to authorize the app
- await client.auth.waitForCompletion(authResponse.id);
-}
-
-const response_github = await client.tools.execute({
- tool_name: "GitHub.SetStarred",
- input: {
- owner: "ArcadeAI",
- name: "arcade-mcp",
- starred: true,
- },
- user_id: userId,
-});
-
-console.log(response_github.output.value);
-```
-
-
-
-
-
-### Run the code
-
-
-
-
-
- ```bash
- uv run example.py
- > The square root of 625 is 25
- > Successfully starred the repository ArcadeAI/arcade-mcp
- ```
-
-
-
-
- ```bash
- node example.mjs
- > The square root of 625 is 25
- > Successfully starred the repository ArcadeAI/arcade-mcp
- ```
-
-
-
-
-
-
-## Next Steps
-
-In this simple example, we call the tool methods directly. In your real applications and agents, you'll likely be letting the LLM decide which tools to call - learn more about using Arcade with Frameworks in the [Frameworks](/home/langchain/use-arcade-tools) section, or [how to build your own tools](/home/build-tools/create-a-mcp-server).
diff --git a/app/en/home/quickstarts/_meta.tsx b/app/en/home/quickstarts/_meta.tsx
new file mode 100644
index 000000000..844ff782e
--- /dev/null
+++ b/app/en/home/quickstarts/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "call-tool-easy": "Call a tool in your app/agent",
+ "call-tool-personal-agent": "Call a tool in your IDE/MCP Client",
+};
diff --git a/app/en/home/quickstarts/call-tool-easy/page.mdx b/app/en/home/quickstarts/call-tool-easy/page.mdx
new file mode 100644
index 000000000..b041167f0
--- /dev/null
+++ b/app/en/home/quickstarts/call-tool-easy/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Call a tool in your agent"
+description: "The simplest way to call an Arcade tool in your agent"
+---
+
+# Call a tool in your agent
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/quickstarts/call-tool-personal-agent/page.mdx b/app/en/home/quickstarts/call-tool-personal-agent/page.mdx
new file mode 100644
index 000000000..fddd5f371
--- /dev/null
+++ b/app/en/home/quickstarts/call-tool-personal-agent/page.mdx
@@ -0,0 +1,25 @@
+# Call a tool from your personal agent
+
+Learn how to integrate Arcade tools with your personal AI agent.
+
+## Overview
+
+Learn how to call tools in 3rd party agents, apps, or IDEs using the MCP Gateway.
+
+## Prerequisites
+
+- Arcade API key
+- Supported MCP client
+
+## Setup Steps
+
+1. Configure your MCP Gateway
+2. Connect to your client application
+3. Test tool calling functionality
+
+## Supported Clients
+
+- Cursor
+- Claude Desktop
+- Visual Studio Code
+- Other MCP-compatible applications
\ No newline at end of file
diff --git a/app/en/home/sample-agents/page.mdx b/app/en/home/sample-agents/page.mdx
new file mode 100644
index 000000000..454b662a9
--- /dev/null
+++ b/app/en/home/sample-agents/page.mdx
@@ -0,0 +1,26 @@
+# Sample Agents with Tool Calling
+
+This is a placeholder page for sample agents with tool calling examples.
+
+## Overview
+
+Explore a suite of example agents you can duplicate and build off of for your custom applications.
+
+## Available Examples
+
+- Customer support agent
+- Data analysis agent
+- Content creation agent
+- Task automation agent
+
+## Getting Started
+
+Each sample agent includes:
+- Complete source code
+- Setup instructions
+- Tool configuration
+- Deployment guidelines
+
+## Template Repository
+
+Find all sample agents in our GitHub repository with ready-to-deploy examples.
\ No newline at end of file
diff --git a/app/en/home/security-section/_meta.tsx b/app/en/home/security-section/_meta.tsx
new file mode 100644
index 000000000..216e236f4
--- /dev/null
+++ b/app/en/home/security-section/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ "platform-security": "Platform security",
+ "enterprise-sso": "Enterprise single sign on",
+ "rbac-config": "Configure role-based access control for your organization",
+};
diff --git a/app/en/home/security-section/enterprise-sso/page.mdx b/app/en/home/security-section/enterprise-sso/page.mdx
new file mode 100644
index 000000000..009719dab
--- /dev/null
+++ b/app/en/home/security-section/enterprise-sso/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Enterprise Single Sign On"
+description: "Learn about enterprise SSO integration"
+---
+
+# Enterprise Single Sign On
+
+Coming soon!
diff --git a/app/en/home/security-section/platform-security/page.mdx b/app/en/home/security-section/platform-security/page.mdx
new file mode 100644
index 000000000..0a0971791
--- /dev/null
+++ b/app/en/home/security-section/platform-security/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Platform Security"
+description: "Learn about Arcade platform security"
+---
+
+# Platform Security
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/security-section/rbac-config/page.mdx b/app/en/home/security-section/rbac-config/page.mdx
new file mode 100644
index 000000000..48c351e9b
--- /dev/null
+++ b/app/en/home/security-section/rbac-config/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Configuring Role Based Access Control for your organization"
+description: "Learn how to configure RBAC for your organization"
+---
+
+# Configuring Role Based Access Control for your organization
+
+Coming soon!
diff --git a/app/en/home/security/page.mdx b/app/en/home/security/page.mdx
index 1bed172bd..7621354ee 100644
--- a/app/en/home/security/page.mdx
+++ b/app/en/home/security/page.mdx
@@ -1,49 +1,7 @@
----
-title: "Security Research Program"
-description: "Report security vulnerabilities and help us build safe and reliable tools"
----
+# Security
-# Security Research Program
+Security best practices for Arcade applications.
-At Arcade, security is fundamental to our mission of building safe and reliable tools. We recognize that the security research community plays a valuable role in identifying potential vulnerabilities.
-
-## Scope
-
-Our program covers security issues in:
-* Arcade production services and APIs
-* Agent authentication and authorization mechanisms
-* Data handling and storage systems
-* Published open-source components
-
-## What we're looking for
-
-We're interested in reports about:
-* Authentication or authorization bypasses
-* Data exposure or leakage
-* Injection vulnerabilities
-* Logic flaws affecting agent behavior
-* Issues that could compromise user data or agent integrity
-
-## Reporting process
-
-Please email [security@arcade.dev](mailto:security@arcade.dev) with:
-* A clear description of the issue
-* Steps to reproduce
-* Potential impact assessment
-* Any relevant proof-of-concept code (please be responsible)
-
-We'll acknowledge receipt within 72 hours and aim to provide an initial assessment within one week.
-
-## Guidelines
-
-* Please allow us reasonable time to address issues before public disclosure
-* Avoid automated scanning that could impact service availability
-* Do not access or modify other users' data
-* Keep any discovered vulnerabilities confidential until resolved
-
-## Recognition
-
-While we're a small team with limited resources, we appreciate the effort researchers put into improving our security. We'll credit researchers (with permission) in our security updates and may provide modest rewards for significant findings on a case-by-case basis.
-
-For questions about this program, please contact [security@arcade.dev](mailto:security@arcade.dev).
+## Overview
+Learn about security considerations and best practices.
diff --git a/app/en/home/serve-tools/_meta.tsx b/app/en/home/serve-tools/_meta.tsx
deleted file mode 100644
index c7e61f707..000000000
--- a/app/en/home/serve-tools/_meta.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- "arcade-deploy": "Arcade Deploy",
- "securing-arcade-mcp": "Securing Arcade MCP",
-};
diff --git a/app/en/home/serve-tools/securing-arcade-mcp/page.mdx b/app/en/home/serve-tools/securing-arcade-mcp/page.mdx
deleted file mode 100644
index 4b3a8a287..000000000
--- a/app/en/home/serve-tools/securing-arcade-mcp/page.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
-# Securing Arcade MCP Deployments
-
-You may have noticed that when you connected to the MCP serer you created with `arcade-mcp`, you could immediately call your tools from local MCP Clients and agents, like Claude and Cursor. This is because the `arcade-mcp` server is *not* secured by any mechanism by default. Most use-cases for MCP servers today are local development or local to a single machine, and we optimize for that use-case.
-
-However, you can secure your MCP server by deploying it to Arcade (available today) or using OAuth (coming soon).
-
-## Arcade Deploy
-When you `arcade deploy` your MCP server, it will be secured behind the Arcade platform.
-
-Under the hood, we disable the MCP routes provided by `arcade-mcp`, and use the Arcade Engine as a gateway for your MCP server, which has a number of additional features. Arcade will create a randomized secure secret for your MCP server (via the `ARCADE_WORKER_SECRET` environment variable) so that your server is protected from unauthorized access, as well as being isolated from direct access from outside of the Arcade platform. Servers managed by Arcade (servers that are `arcade deploy`ed) serve `/worker` endpoints that are protected by this secret. The worker endpoints are `worker/health`, `/worker/tools`, and `/worker/tools/invoke`. The health endpoint is not protected by this secret, but the listing tools and tool invocations are. You can explore this locally by setting the same environment variable in your locally.
-
-Learn more about how to deploy your MCP server to Arcade [here](/home/serve-tools/arcade-deploy).
-
-## OAuth (Coming soon)
-Coming soon, you will be able to secure your MCP server's `/mcp` endpoints with a OAuth Authorization Server (AS) - either using Dynamic Client Registration (DCR) or Client ID Metadata Documents (CIMD). Learn more about how MCP integrates with OAuth [here](https://blog.modelcontextprotocol.io/posts/client_registration/).
diff --git a/app/en/home/setup/_meta.tsx b/app/en/home/setup/_meta.tsx
new file mode 100644
index 000000000..d624b2d59
--- /dev/null
+++ b/app/en/home/setup/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "api-key": "Get an API key",
+ "connect-arcade-docs": "Connect Arcade docs to your IDE",
+};
diff --git a/app/en/home/setup/api-key/page.mdx b/app/en/home/setup/api-key/page.mdx
new file mode 100644
index 000000000..b1c436f3e
--- /dev/null
+++ b/app/en/home/setup/api-key/page.mdx
@@ -0,0 +1,108 @@
+---
+title: "Getting Your API Key"
+description: "Learn how to obtain and manage your Arcade API key"
+---
+
+import { Steps, Tabs, Callout } from "nextra/components";
+import { SignupLink } from "@/app/_components/analytics";
+
+# Getting Your API Key
+
+Before you begin, you'll need an Arcade account - if you haven't created one yet, you can sign up here. Once you have an account, you can generate API keys through either our dashboard or CLI.
+
+
+
+
+
+### Using the Dashboard
+
+
+
+
+
+
+### Navigate to API Keys page
+Visit the [API Keys page](https://api.arcade.dev/dashboard/api-keys) in Arcade Dashboard.
+
+### Create a new API key
+
+1. Click the `Create API Key` button in the top right
+2. Enter a descriptive name to help identify your key
+3. Click `Create API Key` to generate your key
+
+### Save your API key securely
+
+1. Copy your API key immediately - it will only be shown once
+2. Store it securely
+3. You can always generate new keys if needed
+
+
+
+
+
+
+
+### Using the CLI
+
+
+
+### Install and login
+
+1. Install the Arcade CLI:
+
+
+
+
+```bash
+uv tool install arcade-mcp
+```
+
+
+This will install the Arcade CLI as a [uv tool](https://docs.astral.sh/uv/guides/tools/), making it available system wide.
+
+
+
+
+```bash
+pip install arcade-mcp
+```
+
+
+
+2. Start the login process:
+
+```bash
+arcade login
+```
+
+### Complete setup
+
+The CLI will automatically:
+
+- Print your API key to the console
+- Save your credentials to `~/.arcade/credentials.yaml`
+
+
+
+
+
+
+
+ API keys are administrator credentials. Anyone who has your API key can make
+ requests to Arcade as you. Always store your API keys in a safe place, such as
+ system environment variables, and never commit them to version control, share
+ them publicly, or use them in browser or frontend code.
+
+## Next Steps
+
+Once you have your API key, you can:
+
+- [Start using tools](/home/quickstart)
+- [Create custom tools](/home/build-tools/create-a-mcp-server)
\ No newline at end of file
diff --git a/app/en/home/agentic-development/page.mdx b/app/en/home/setup/connect-arcade-docs/page.mdx
similarity index 96%
rename from app/en/home/agentic-development/page.mdx
rename to app/en/home/setup/connect-arcade-docs/page.mdx
index 40845e0e1..d575d5d7c 100644
--- a/app/en/home/agentic-development/page.mdx
+++ b/app/en/home/setup/connect-arcade-docs/page.mdx
@@ -23,4 +23,4 @@ Context7 is an MCP server designed to provide Large Language Models (LLMs) and A
To use Context7, you first need to add the [Context7 MCP server](https://github.com/upstash/context7) to your editor, and then select the [`arcadeai/docs` project](https://context7.com/arcadeai/docs).
-Learn more about Context7 [here](https://context7.com/).
+Learn more about Context7 [here](https://context7.com/).
\ No newline at end of file
diff --git a/app/en/home/sharing-with-end-users/_meta.tsx b/app/en/home/sharing-with-end-users/_meta.tsx
new file mode 100644
index 000000000..4c9160fc1
--- /dev/null
+++ b/app/en/home/sharing-with-end-users/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ "multi-user-auth": "Set up secure multi-user auth",
+ "configure-oauth-provider": "Configure an OAuth provider",
+ "brand-auth-flow": "Brand your Auth flow",
+};
diff --git a/app/en/home/sharing-with-end-users/brand-auth-flow/page.mdx b/app/en/home/sharing-with-end-users/brand-auth-flow/page.mdx
new file mode 100644
index 000000000..ed45d0b03
--- /dev/null
+++ b/app/en/home/sharing-with-end-users/brand-auth-flow/page.mdx
@@ -0,0 +1,3 @@
+# Brand your Auth flow
+
+Coming soon!
\ No newline at end of file
diff --git a/app/en/home/sharing-with-end-users/configure-oauth-provider/page.mdx b/app/en/home/sharing-with-end-users/configure-oauth-provider/page.mdx
new file mode 100644
index 000000000..2e88002de
--- /dev/null
+++ b/app/en/home/sharing-with-end-users/configure-oauth-provider/page.mdx
@@ -0,0 +1,27 @@
+# Configure an OAuth provider
+
+Learn how to configure OAuth providers for your user-facing agents to enable secure authentication with external services.
+
+## Overview
+
+When building user-facing agents, you need to configure OAuth providers to allow your users to securely connect their accounts with third-party services. This enables your agents to perform actions on behalf of your users while maintaining proper authorization and security.
+
+## Key Concepts
+
+- **OAuth Provider Configuration**: Set up the connection between your application and external services
+- **User Consent**: Enable users to grant permissions to your agents
+- **Token Management**: Handle access tokens and refresh tokens securely
+- **Scope Management**: Request appropriate permissions for your use case
+
+## Getting Started
+
+Configure OAuth providers through the Arcade Dashboard or programmatically via the Arcade API to enable your agents to access external services with user authorization.
+
+## Next Steps
+
+- Set up your first OAuth provider in the Dashboard
+- Configure user consent flows
+- Test the authentication process
+- Deploy your user-facing agent
+
+Documentation coming soon.
\ No newline at end of file
diff --git a/app/en/home/sharing-with-end-users/multi-user-auth/page.mdx b/app/en/home/sharing-with-end-users/multi-user-auth/page.mdx
new file mode 100644
index 000000000..0fa8e76dc
--- /dev/null
+++ b/app/en/home/sharing-with-end-users/multi-user-auth/page.mdx
@@ -0,0 +1,8 @@
+---
+title: "Set up secure multi-user auth"
+description: "Learn how to set up secure multi-user authentication for your application"
+---
+
+# Set up secure multi-user auth
+
+Coming soon!
diff --git a/app/en/home/tool-calling-intro/page.mdx b/app/en/home/tool-calling-intro/page.mdx
new file mode 100644
index 000000000..749e2f6f9
--- /dev/null
+++ b/app/en/home/tool-calling-intro/page.mdx
@@ -0,0 +1,31 @@
+# Tool Calling Introduction
+
+This is a placeholder page for an introduction to tool calling.
+
+## Overview
+
+Learn the fundamentals of tool calling with Arcade and how it enhances AI applications.
+
+## What is Tool Calling?
+
+Tool calling allows AI models to interact with external systems and APIs to perform actions beyond text generation.
+
+## Key Concepts
+
+- **Tools**: Functions that can be called by AI models
+- **Schemas**: Descriptions of tool parameters and return values
+- **Authorization**: Managing access to authenticated tools
+- **Context**: Runtime data passed to tools
+
+## Benefits
+
+- Extend AI capabilities beyond text
+- Connect to real-world systems
+- Perform actions on behalf of users
+- Access live data and services
+
+## Next Steps
+
+- [Error Handling](/en/home/error-handling)
+- [Tool Formats](/en/home/tool-formats)
+- [Authorized Tool Calling](/en/home/authorized-tool-calling)
\ No newline at end of file
diff --git a/app/en/home/tools/page.mdx b/app/en/home/tools/page.mdx
new file mode 100644
index 000000000..db1f4ea69
--- /dev/null
+++ b/app/en/home/tools/page.mdx
@@ -0,0 +1,35 @@
+# Tools
+
+Arcade provides a comprehensive ecosystem for AI tools that enable your agents to take real-world actions. Whether you need pre-built integrations or want to create custom functionality, Arcade has you covered.
+
+## Explore Our Tool Catalog
+
+Discover hundreds of ready-to-use tools for popular services like Gmail, Slack, GitHub, and more. Our catalog contains production-ready MCP servers that handle authentication, permissions, and API integrations seamlessly.
+
+[Browse Tool Catalog →](/mcp-servers)
+
+## Create Your Own Tools
+
+Build custom tools tailored to your specific needs using our powerful development framework. Create MCP servers, define tool schemas, and deploy them to production with ease.
+
+[Learn to Build Tools →](/home/creating-tools/tool-basics/build-mcp-server)
+
+## Contribute to the Catalog
+
+Share your tools with the Arcade community and help expand our ecosystem. Submit your MCP servers to make them available to developers worldwide.
+
+[Add Your Tools to the Catalog →](/home/creating-tools/new-functionality/custom-toolkit)
+
+## Why Choose Arcade Tools?
+
+- **Authentication Built-in**: OAuth flows and user permissions handled automatically
+- **Production Ready**: Tested, documented, and maintained by our team
+- **Universal Compatibility**: Works with any LLM or agent framework via MCP
+- **Scalable Architecture**: Tools run independently and scale based on demand
+
+## Getting Started
+
+1. **Explore**: Browse our catalog to find tools for your use case
+2. **Integrate**: Use our client libraries to connect tools to your agents
+3. **Customize**: Create your own tools when you need specific functionality
+4. **Share**: Contribute back to the community by adding your tools to our catalog
\ No newline at end of file
diff --git a/app/en/home/turn-api-to-mcp/page.mdx b/app/en/home/turn-api-to-mcp/page.mdx
new file mode 100644
index 000000000..9e25c3671
--- /dev/null
+++ b/app/en/home/turn-api-to-mcp/page.mdx
@@ -0,0 +1,3 @@
+# Turn an external API into a MCP Server
+
+Transform external APIs into MCP servers for use in agents.
\ No newline at end of file
diff --git a/app/en/home/use-tools/_meta.tsx b/app/en/home/use-tools/_meta.tsx
deleted file mode 100644
index 7661d8b0b..000000000
--- a/app/en/home/use-tools/_meta.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { MetaRecord } from "nextra";
-
-export default {
- "tools-overview": "Introduction",
- "get-tool-definitions": "Tool formats",
- "types-of-tools": "Types of tools",
- "error-handling": "Error handling",
-} satisfies MetaRecord;
diff --git a/app/en/home/vercelai/_meta.tsx b/app/en/home/vercelai/_meta.tsx
deleted file mode 100644
index 6305a7f2b..000000000
--- a/app/en/home/vercelai/_meta.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
- "using-arcade-tools": "Using Arcade tools",
-};
diff --git a/app/en/home/what-is-agent/_meta.tsx b/app/en/home/what-is-agent/_meta.tsx
new file mode 100644
index 000000000..5ace1f9a3
--- /dev/null
+++ b/app/en/home/what-is-agent/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "why-agents-call-tools": "Why and how do agents call tools",
+ "intro-to-tag": "Intro to TAG",
+};
diff --git a/app/en/home/what-is-agent/intro-to-tag/page.mdx b/app/en/home/what-is-agent/intro-to-tag/page.mdx
new file mode 100644
index 000000000..2229639cf
--- /dev/null
+++ b/app/en/home/what-is-agent/intro-to-tag/page.mdx
@@ -0,0 +1,3 @@
+# Intro to TAG
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/what-is-agent/why-agents-call-tools/page.mdx b/app/en/home/what-is-agent/why-agents-call-tools/page.mdx
new file mode 100644
index 000000000..40df4c774
--- /dev/null
+++ b/app/en/home/what-is-agent/why-agents-call-tools/page.mdx
@@ -0,0 +1,3 @@
+# Why and how do agents call tools?
+
+Coming soon.
\ No newline at end of file
diff --git a/app/en/home/why-agents-call-tools/page.mdx b/app/en/home/why-agents-call-tools/page.mdx
new file mode 100644
index 000000000..7efa78eb0
--- /dev/null
+++ b/app/en/home/why-agents-call-tools/page.mdx
@@ -0,0 +1,7 @@
+# Why and how do agents call tools?
+
+Learn why agents need tools and how tool calling works.
+
+## Overview
+
+Understand the relationship between agents and tools.
diff --git a/app/en/mcp-servers/components/filters-bar.tsx b/app/en/mcp-servers/components/filters-bar.tsx
index 9d41b5640..9fc7024f2 100644
--- a/app/en/mcp-servers/components/filters-bar.tsx
+++ b/app/en/mcp-servers/components/filters-bar.tsx
@@ -54,7 +54,7 @@ export function FiltersBar({ resultsCount }: FiltersBarProps) {