diff --git a/app/cheat-sheet-print.css b/app/cheat-sheet-print.css
index 289a83af0..2c406e3a5 100644
--- a/app/cheat-sheet-print.css
+++ b/app/cheat-sheet-print.css
@@ -135,11 +135,6 @@
font-size: 5.5pt !important;
}
- .cheat-sheet-section .prose code,
- .cheat-sheet-section .markdown code {
- font-size: 5.5pt !important;
- }
-
/* Hide Nextra's terminal UI wrapper */
.my-4.overflow-hidden.rounded-lg.border > .flex.items-center.justify-between {
display: none !important;
@@ -185,6 +180,11 @@
margin: 2pt 0 !important;
}
+ .cheat-sheet-section .prose code,
+ .cheat-sheet-section .markdown code {
+ font-size: 5.5pt !important;
+ }
+
/* Code blocks inside pre elements */
pre code,
.cheat-sheet-section pre code,
diff --git a/app/en/get-started/mcp-clients/_meta.tsx b/app/en/get-started/mcp-clients/_meta.tsx
index 7853f9115..974c617d1 100644
--- a/app/en/get-started/mcp-clients/_meta.tsx
+++ b/app/en/get-started/mcp-clients/_meta.tsx
@@ -26,6 +26,9 @@ const meta: MetaRecord = {
"copilot-studio": {
title: "Microsoft Copilot Studio",
},
+ "github-copilot": {
+ title: "GitHub Copilot",
+ },
};
export default meta;
diff --git a/app/en/get-started/mcp-clients/github-copilot/page.mdx b/app/en/get-started/mcp-clients/github-copilot/page.mdx
new file mode 100644
index 000000000..83c01e607
--- /dev/null
+++ b/app/en/get-started/mcp-clients/github-copilot/page.mdx
@@ -0,0 +1,209 @@
+import { Steps, Callout, Tabs } from "nextra/components";
+import { SignupLink } from "@/app/_components/analytics";
+import Image from "next/image";
+
+export const IMAGE_SCALE_FACTOR = 2;
+export const JETBRAINS_START_WIDTH = 318;
+export const JETBRAINS_START_HEIGHT = 184;
+export const VISUAL_STUDIO_STEP_1_WIDTH = 276;
+export const VISUAL_STUDIO_STEP_1_HEIGHT = 120;
+export const VISUAL_STUDIO_STEP_2_WIDTH = 1606;
+export const VISUAL_STUDIO_STEP_2_HEIGHT = 270;
+export const VISUAL_STUDIO_STEP_3_WIDTH = 674;
+export const VISUAL_STUDIO_STEP_3_HEIGHT = 288;
+export const VISUAL_STUDIO_STEP_4_WIDTH = 1070;
+export const VISUAL_STUDIO_STEP_4_HEIGHT = 898;
+export const VISUAL_STUDIO_STEP_5_WIDTH = 660;
+export const VISUAL_STUDIO_STEP_5_HEIGHT = 362;
+export const VISUAL_STUDIO_STEP_6_WIDTH = 1632;
+export const VISUAL_STUDIO_STEP_6_HEIGHT = 360;
+
+# Use Arcade in GitHub Copilot
+
+
+
+
+Connect GitHub Copilot to an Arcade MCP Gateway.
+
+
+
+
+
+1. Create an Arcade account
+2. Get an [Arcade API key](/get-started/setup/api-keys)
+3. Create an [Arcade MCP Gateway](/guides/mcp-gateways) and select the tools you want to use
+
+
+
+
+
+### Set up GitHub Copilot
+
+
+
+ In VS Code, Github Copilot will automatically detect the configured MCP
+ servers. Read the [VS Code
+ instructions](/get-started/mcp-clients/visual-studio-code) to set both of
+ them up.
+
+
+
+ The GitHub Copilot extension for JetBrains IDEs does not currently support remote MCP servers with Dynamic Client Registration. To use an Arcade MCP Gateway with GitHub Copilot on a JetBrains IDE, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+
+ 1. In the lower right corner, click the GitHub Copilot icon.
+ 2. From the menu, select "Open Chat", make sure you are in Agent mode, then click the tools icon.
+ 3. A dialog will open with a list of tools. On the bottom left, click "+ Add More Tools..."
+ 4. This will open the `mcp.json` file in the editor. In the `mcp.json` file, define your MCP servers.
+
+
+
+
+ ```json
+ {
+ "servers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "requestInit": {
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+ }
+ }
+ ```
+
+
+
+ The GitHub Copilot extension for JetBrains IDEs does not currently support remote MCP servers with Dynamic Client Registration. To use an Arcade MCP Gateway with GitHub Copilot on a JetBrains IDE, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+
+
+ Once you save the `mcp.json` file, a start button will appear over the new server name. Click it to start the MCP server.
+
+
+
+ MCP tools are only available in Agent mode.
+
+
+
+
+
+ The GitHub Copilot extension for Visual Studio does not currently support every remote MCP server with Dynamic Client Registration. To use an Arcade MCP Gateway with GitHub Copilot on Visual Studio, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+ In Visual Studio,
+
+ 1. In the upper right corner, click the GitHub Copilot icon.
+
+
+
+ 2. On the bottom of the GitHub Copilot panel, click the tools icon (two wrenches).
+
+
+
+ 3. A dialog will open with a list of tools. On the top right corner of this dialog, click the "+" icon to add a new tool.
+
+
+
+ 4. This will open another dialog. Fill in the information for your MCP server. You will need to choose:
+ - **Destination**: The path to the MCP configuration file, if you choose "Global", the MCP gateway will be added to all solutions. If you choose "Solution", the MCP gateway will be added to the current solution only.
+ - **Server ID**: The ID of the MCP server you're adding, this is how it will be displayed in the list of servers.
+ - **Type**: For MCP gateways, you must select "HTTP".
+ - **URL**: The URL of the MCP gateway.
+ - **Headers**: The headers to pass to the MCP gateway.
+ - Click "Save" to add the MCP server.
+
+
+
+ 5. Once you save the MCP server, it will be added to the list of servers. It will be disabled by default. To enable it, click the checkbox next to the server name.
+
+
+
+ 6. Once the server is enabled, it will be available in the list of tools. If tools are not available, you may need to open the `.mcp.json` file you picked as the destination. Visual Studio will display a "Configure" and "Reconnect" buttons on top of each entry. Clicking "Reconnect" should fix any issues.
+
+
+
+
+
+
+ ```json
+ {
+ "servers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+ }
+ ```
+
+
+
+ The GitHub Copilot extension for Visual Studio does not currently support every remote MCP server with Dynamic Client Registration. To use an Arcade MCP Gateway with GitHub Copilot on Visual Studio, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+
+
+
+
+ Coming soon...
+
+
+ Coming soon...
+
+
+
+### Try it out
+
+1. Open the chat pane (typically command-l on MacOS)
+1. Make sure you are in **Agent** mode
+1. Ask the agent to use a tool.
diff --git a/app/en/home/landing-page.tsx b/app/en/home/landing-page.tsx
index dfc0cc430..dc7318ced 100644
--- a/app/en/home/landing-page.tsx
+++ b/app/en/home/landing-page.tsx
@@ -211,10 +211,10 @@ export function LandingPage() {
{/* Search */}
-
+
setSearchQuery("")}
type="button"
>
diff --git a/public/_markdown/en/get-started/agent-frameworks/crewai/custom-auth-flow.md b/public/_markdown/en/get-started/agent-frameworks/crewai/custom-auth-flow.md
new file mode 100644
index 000000000..52dc195e2
--- /dev/null
+++ b/public/_markdown/en/get-started/agent-frameworks/crewai/custom-auth-flow.md
@@ -0,0 +1,147 @@
+---
+title: "Custom Auth Flow with CrewAI"
+description: "Learn how to create a custom auth flow with CrewAI"
+---
+[Agent Frameworks](/en/get-started/agent-frameworks.md)
+[CrewAI](/en/get-started/agent-frameworks/crewai/use-arcade-tools.md)
+Custom auth flow
+
+## Custom Auth Flow with CrewAI
+
+In this guide, we will explore how to create a custom auth flow that will be performed before executing Arcade tools within your CrewAI team.
+
+The `ArcadeToolManager`’s built-in authorization and execution flows work well for many typical use cases. However, some scenarios call for a tailored approach. By implementing a custom auth flow, you gain flexibility in handling tool authorization. If your use case calls for a unique interface, additional approval steps, or specialized error handling, then this guide is for you.
+
+### Prerequisites
+
+- [Obtain an Arcade API key](/get-started/setup/api-keys.md)
+
+
+### Set up your environment
+
+Install the required package, and ensure your environment variables are set with your Arcade and OpenAI :
+
+```bash
+pip install crewai-arcade
+```
+
+### Configure API keys
+
+Provide your Arcade and OpenAI . 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"
+```
+
+### Define your custom auth flow
+
+The custom auth flow defined in the following code snippet is a function that will be called whenever CrewAI needs to call a .
+
+```python
+from typing import Any
+
+from crewai_arcade import ArcadeToolManager
+
+USER_ID = "{arcade_user_id}"
+
+def custom_auth_flow(
+ manager: ArcadeToolManager, tool_name: str, **tool_input: dict[str, Any]
+) -> Any:
+ """Custom auth flow for the ArcadeToolManager
+
+ This function is called when CrewAI needs to call a tool that requires authorization.
+ Authorization is handled before executing the tool.
+ This function overrides the ArcadeToolManager's default auth flow performed by ArcadeToolManager.authorize_tool
+ """
+ # Get authorization status
+ auth_response = manager.authorize(tool_name, USER_ID)
+
+ # If the user is not authorized for the tool,
+ # then we need to handle the authorization before executing the tool
+ if not manager.is_authorized(auth_response.id):
+ print(f"Authorization required for tool: '{tool_name}' with inputs:")
+ for input_name, input_value in tool_input.items():
+ print(f" {input_name}: {input_value}")
+ # Handle authorization
+ print(f"\nTo authorize, visit: {auth_response.url}")
+ # Block until the user has completed the authorization
+ auth_response = manager.wait_for_auth(auth_response)
+
+ # Ensure authorization completed successfully
+ if not manager.is_authorized(auth_response.id):
+ raise ValueError(f"Authorization failed for {tool_name}. URL: {auth_response.url}")
+ else:
+ print(f"Authorization already granted for tool: '{tool_name}' with inputs:")
+ for input_name, input_value in tool_input.items():
+ print(f" {input_name}: {input_value}")
+
+
+def tool_manager_callback(tool_manager: ArcadeToolManager, tool_name: str, **tool_input: dict[str, Any]) -> Any:
+ """Tool executor callback with custom auth flow for the ArcadeToolManager
+
+ ArcadeToolManager's default executor handles authorization and tool execution.
+ This function overrides the default executor to handle authorization in a custom way and then executes the tool.
+ """
+ custom_auth_flow(tool_manager, tool_name, **tool_input)
+ return tool_manager.execute_tool(USER_ID, tool_name, **tool_input)
+```
+
+### Get Arcade tools
+
+You can now provide the manager callback to the `ArcadeToolManager` upon initialization:
+
+```python
+# Provide the tool manager callback to the ArcadeToolManager
+manager = ArcadeToolManager(executor=tool_manager_callback)
+
+# Retrieve 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 with the custom auth flow. When the is called, your tool manager callback will be called to handle the authorization and then the tool will be executed.
+
+```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)
+```
+
+## Next steps
+
+Now you’re ready to integrate Arcade tools with a custom auth flow into your own CrewAI team.
+
+Last updated on February 10, 2026
+
+[Using Arcade tools](/en/get-started/agent-frameworks/crewai/use-arcade-tools.md)
+[Overview](/en/get-started/agent-frameworks/google-adk/overview.md)
diff --git a/public/_markdown/en/get-started/agent-frameworks/openai-agents/use-arcade-with-openai-agents.md b/public/_markdown/en/get-started/agent-frameworks/openai-agents/use-arcade-with-openai-agents.md
new file mode 100644
index 000000000..2f0665d92
--- /dev/null
+++ b/public/_markdown/en/get-started/agent-frameworks/openai-agents/use-arcade-with-openai-agents.md
@@ -0,0 +1,36 @@
+---
+title: "Arcade with OpenAI Agents"
+description: "Integrate Arcade tools with the OpenAI Agents SDK"
+---
+[Agent Frameworks](/en/get-started/agent-frameworks.md)
+OpenAI AgentsOverview
+
+# Arcade with OpenAI Agents
+
+The [OpenAI Agents SDK](https://openai.github.io/openai-agents-python/) provides a framework for building AI . Arcade integrates with both the Python and JavaScript versions, giving your agents access to Gmail, GitHub, Slack, and 100+ other .
+
+## Get started
+
+Choose your language to set up Arcade with OpenAI :
+
+- **[Python setup](/get-started/agent-frameworks/openai-agents/setup-python.md)
+ ** - Build a CLI with Arcade using the `agents-arcade` package
+- **[TypeScript setup](/get-started/agent-frameworks/openai-agents/setup-typescript.md)
+ ** - Build an with Arcade using `@arcadeai/arcadejs`
+
+## What you can build
+
+With Arcade and OpenAI , your agents can:
+
+- Read and send emails via Gmail
+- Post messages to Slack channels
+- Create GitHub issues and pull requests
+- Search the web and extract content
+- Access 100+ other integrations
+
+Browse the [full MCP server catalog](/resources/integrations.md) to see all available .
+
+Last updated on February 10, 2026
+
+[Mastra](/en/get-started/agent-frameworks/mastra.md)
+[Setup (Python)](/en/get-started/agent-frameworks/openai-agents/setup-python.md)
diff --git a/public/_markdown/en/get-started/mcp-clients/github-copilot.md b/public/_markdown/en/get-started/mcp-clients/github-copilot.md
new file mode 100644
index 000000000..cf0044449
--- /dev/null
+++ b/public/_markdown/en/get-started/mcp-clients/github-copilot.md
@@ -0,0 +1,135 @@
+---
+title: "Use Arcade in GitHub Copilot"
+description: "Arcade - AI platform for developers"
+---
+[MCP Clients](/en/get-started/mcp-clients.md)
+GitHub Copilot
+
+# Use Arcade in GitHub Copilot
+
+## Outcomes
+
+Connect GitHub Copilot to an Arcade Gateway.
+
+### Prerequisites
+
+1. Create an [Arcade](https://app.arcade.dev/register)
+
+2. Get an [Arcade API key](/get-started/setup/api-keys.md)
+
+3. Create an [Arcade MCP Gateway](/guides/mcp-gateways.md)
+ and select the you want to use
+
+### Set up GitHub Copilot
+
+### VS Code
+
+In VS Code, Github Copilot will automatically detect the configured servers. Read the [VS Code instructions](/get-started/mcp-clients/visual-studio-code.md) to set both of them up.
+
+### JetBrains IDEs
+
+The GitHub Copilot extension for JetBrains IDEs does not currently support remote servers with Dynamic Client Registration. To use an Arcade with GitHub Copilot on a JetBrains IDE, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+1. In the lower right corner, click the GitHub Copilot icon.
+2. From the menu, select “Open Chat”, make sure you are in mode, then click the icon.
+3. A dialog will open with a list of . On the bottom left, click ”+ Add More Tools…”
+4. This will open the `mcp.json` file in the editor. In the `mcp.json` file, define your servers.
+
+### Arcade Headers
+
+```json
+{
+ "servers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "requestInit": {
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+ }
+}
+```
+
+### Arcade Auth
+
+The GitHub Copilot extension for JetBrains IDEs does not currently support remote servers with Dynamic Client Registration. To use an Arcade with GitHub Copilot on a JetBrains IDE, you must configure the MCP gateway as `Arcade Auth` in the dashboard.
+
+Once you save the `mcp.json` file, a start button will appear over the new server name. Click it to start the server.
+
+
+
+ tools are only available in mode.
+
+### Visual Studio
+
+The GitHub Copilot extension for Visual Studio does not currently support every remote server with Dynamic Client Registration. To use an Arcade with GitHub Copilot on Visual Studio, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+In Visual Studio,
+
+1. In the upper right corner, click the GitHub Copilot icon.
+
+ 
+2. On the bottom of the GitHub Copilot panel, click the icon (two wrenches).
+
+ 
+3. A dialog will open with a list of tools. On the top right corner of this dialog, click the ”+” icon to add a new .
+
+ 
+4. This will open another dialog. Fill in the information for your server. You will need to choose:
+
+ - **Destination**: The path to the configuration file, if you choose “Global”, the will be added to all solutions. If you choose “Solution”, the MCP gateway will be added to the current solution only.
+ - **Server ID**: The ID of the server you’re adding, this is how it will be displayed in the list of servers.
+ - **Type**: For gateways, you must select “HTTP”.
+ - **URL**: The URL of the gateway.
+ - **Headers**: The headers to pass to the gateway.
+ - Click “Save” to add the server.
+
+ 
+5. Once you save the server, it will be added to the list of servers. It will be disabled by default. To enable it, click the checkbox next to the server name.
+
+ 
+6. Once the server is enabled, it will be available in the list of . If tools are not available, you may need to open the `.mcp.json` file you picked as the destination. Visual Studio will display a “Configure” and “Reconnect” buttons on top of each entry. Clicking “Reconnect” should fix any issues.
+
+ 
+
+### Arcade Headers
+
+```json
+{
+ "servers": {
+ "mcp-arcade": {
+ "url": "https://api.arcade.dev/mcp/",
+ "headers": {
+ "Authorization": "Bearer {arcade_api_key}",
+ "Arcade-User-ID": "{arcade_user_id}"
+ }
+ }
+ }
+}
+```
+
+### Arcade Auth
+
+The GitHub Copilot extension for Visual Studio does not currently support every remote server with Dynamic Client Registration. To use an Arcade with GitHub Copilot on Visual Studio, you must configure the MCP gateway as `Arcade Headers` in the dashboard.
+
+### Eclipse
+
+Coming soon…
+
+### Xcode
+
+Coming soon…
+
+### Try it out
+
+1. Open the chat pane (typically command-l)
+2. Make sure you are in mode
+3. Ask the to use a .
+
+Last updated on February 27, 2026
+
+[Microsoft Copilot Studio](/en/get-started/mcp-clients/copilot-studio.md)
+[Overview](/en/resources/integrations.md)
diff --git a/public/_markdown/en/references/mcp/python/transports.md b/public/_markdown/en/references/mcp/python/transports.md
new file mode 100644
index 000000000..b822ac08d
--- /dev/null
+++ b/public/_markdown/en/references/mcp/python/transports.md
@@ -0,0 +1,233 @@
+---
+title: "Transport Modes"
+description: "Learn about stdio and HTTP transport modes for MCP servers"
+---
+Arcade MCP[Python](/en/references/mcp/python.md)
+Transports
+
+# Transport Modes
+
+ servers can communicate with clients through different transport mechanisms. Each transport is optimized for specific use cases and client types.
+
+The stdio transport is the default transport for servers. It is used by Claude Desktop and similar clients to run locally. Learn more about the different [server types](/guides/create-tools/tool-basics/compare-server-types.md).
+
+## stdio Transport
+
+The stdio (standard input/output) transport is used for direct client connections.
+
+### Characteristics
+
+- Communicates via standard input/output streams
+- Logs go to stderr to avoid interfering with protocol messages
+- Ideal for desktop applications and command-line
+- Used by Claude Desktop and similar clients
+
+### Usage
+
+**Recommended: Using Arcade CLI**
+
+```bash
+# Run with stdio transport
+uv run server.py stdio
+```
+
+**Alternative: Direct Python**
+
+```python
+# Run your server directly
+uv run server.py stdio
+
+# Or with python
+app.run(transport="stdio")
+```
+
+### Client Configuration
+
+For Claude Desktop, use the `arcade configure` command:
+
+```bash
+arcade configure claude --host local
+```
+
+Or manually edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
+
+```json
+{
+ "mcpServers": {
+ "my-tools": {
+ "command": "arcade",
+ "args": ["mcp", "stdio"],
+ "cwd": "/path/to/your/tools"
+ }
+ }
+}
+```
+
+## HTTP Transport
+
+The HTTP transport provides REST/SSE endpoints for web-based clients.
+
+### Characteristics
+
+- RESTful API with Server-Sent Events (SSE) for streaming
+- Supports hot reload for development
+- Includes health checks and API documentation
+- Can be deployed behind reverse proxies
+- Suitable for web applications and services
+
+### Usage
+
+**Recommended: Using Arcade CLI**
+
+```bash
+# Run with HTTP transport (default)
+uv run server.py
+uv run server.py http
+```
+
+**Alternative: Direct Python**
+
+```python
+# Run your server directly
+uv run server.py
+
+# Or with python
+app.run(transport="http", host="0.0.0.0", port=8080)
+```
+
+### Endpoints
+
+When running in HTTP mode, the server provides:
+
+- `GET /worker/health` - Health check endpoint
+- `GET /mcp` - SSE endpoint for protocol
+- `GET /docs` - Swagger UI documentation (debug mode)
+- `GET /redoc` - ReDoc documentation (debug mode)
+
+### Development Features
+
+**With Arcade CLI:**
+
+```python
+# Enable hot reload and debug mode
+app.run(host="127.0.0.1", port=8000, reload=True)
+
+# This enables:
+# - Automatic restart on code changes
+# - Detailed error messages
+# - API documentation endpoints
+# - Verbose logging
+```
+
+## Choosing a Transport
+
+### Use stdio when:
+
+- Integrating with desktop applications (Claude Desktop, VS Code)
+- Building command-line
+- You need simple, direct communication
+- Running in environments without network access
+
+### Use HTTP when:
+
+- Building web applications
+- Deploying to cloud environments
+- You need to support multiple concurrent clients
+- Integrating with existing web services
+- You want API documentation and testing
+
+## Transport Configuration
+
+### Environment Variables
+
+Both transports respect common environment variables:
+
+```bash
+# Server identification
+MCP_SERVER_NAME="My MCP Server"
+MCP_SERVER_VERSION="1.0.0"
+
+# Logging
+MCP_DEBUG=true
+MCP_LOG_LEVEL=DEBUG
+
+# HTTP-specific
+MCP_HTTP_HOST=0.0.0.0
+MCP_HTTP_PORT=8080
+```
+
+### Programmatic Configuration
+
+When using MCPApp:
+
+```python
+from arcade_mcp_server import MCPApp
+
+app = MCPApp(
+ name="my-server",
+ version="1.0.0",
+ log_level="DEBUG"
+)
+
+# Run with specific transport
+if __name__ == "__main__":
+ import sys
+
+ if len(sys.argv) > 1 and sys.argv[1] == "stdio":
+ app.run(transport="stdio")
+ else:
+ app.run(transport="http", host="0.0.0.0", port=8080)
+```
+
+## Security Considerations
+
+### stdio Transport
+
+- Inherits security of the parent process
+- No network exposure
+- Suitable for trusted environments
+
+### HTTP Transport
+
+- Exposes network endpoints
+- Should use authentication in production
+- Consider using HTTPS with reverse proxy
+- Implement rate limiting for public deployments
+
+## Advanced Transport Features
+
+### Custom Middleware (HTTP)
+
+Add custom middleware to HTTP transports:
+
+```python
+from arcade_mcp_server import MCPApp
+
+app = MCPApp(name="my-server")
+
+# Add custom middleware
+@app.middleware("http")
+async def add_custom_headers(request, call_next):
+ response = await call_next(request)
+ response.headers["X-Custom-Header"] = "value"
+ return response
+```
+
+### Transport Events
+
+Listen to transport lifecycle events:
+
+```python
+@app.on_event("startup")
+async def startup_handler():
+ print("Server starting up...")
+
+@app.on_event("shutdown")
+async def shutdown_handler():
+ print("Server shutting down...")
+```
+
+Last updated on February 10, 2026
+
+[Overview](/en/references/mcp/python.md)
+[Server](/en/references/mcp/python/server.md)
diff --git a/public/_markdown/en/references/mcp/python/types.md b/public/_markdown/en/references/mcp/python/types.md
new file mode 100644
index 000000000..61405e65a
--- /dev/null
+++ b/public/_markdown/en/references/mcp/python/types.md
@@ -0,0 +1,67 @@
+---
+title: "Types"
+description: "Arcade - AI platform for developers"
+---
+Arcade MCP[Python](/en/references/mcp/python.md)
+Types
+
+# Types
+
+Core Pydantic models and enums for the protocol shapes.
+
+## `arcade_mcp_server.types`
+
+### `CallToolResult`
+
+**Bases:** `Result`
+
+A list of content objects that represent the unstructured result of the call.
+
+#### `content` (instance-attribute)
+
+An optional JSON object that represents the structured result of the call.
+
+### `SessionMessage`
+
+**Type:** dataclass
+
+Wrapper for messages in transport sessions.
+
+## Examples
+
+### Constructing a JSON-RPC request and response model
+
+```python
+from arcade_mcp_server.types import JSONRPCRequest, JSONRPCResponse
+
+req = JSONRPCRequest(id=1, method="ping", params={})
+res = JSONRPCResponse(id=req.id, result={})
+print(req.model_dump_json())
+print(res.model_dump_json())
+```
+
+### Building a tools/call request and examining result shape
+
+```python
+from arcade_mcp_server.types import CallToolRequest, CallToolResult, TextContent
+
+call = CallToolRequest(
+ id=2,
+ method="tools/call",
+ params={
+ "name": "Toolkit.tool",
+ "arguments": {"text": "hello"},
+ },
+)
+# Result would typically be produced by the server:
+result = CallToolResult(
+ content=[TextContent(type="text", text="Echo: hello")],
+ structuredContent={"result": "Echo: hello"},
+ isError=False
+)
+```
+
+Last updated on February 10, 2026
+
+[Middleware](/en/references/mcp/python/middleware.md)
+[Errors](/en/references/mcp/python/errors.md)
diff --git a/public/images/mcp-gateway/github-copilot/jetbrains/start-mcp.png b/public/images/mcp-gateway/github-copilot/jetbrains/start-mcp.png
new file mode 100644
index 000000000..8be2b0d54
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/jetbrains/start-mcp.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-1.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-1.png
new file mode 100644
index 000000000..8ac05beb2
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-1.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-2.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-2.png
new file mode 100644
index 000000000..0651c155c
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-2.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-3.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-3.png
new file mode 100644
index 000000000..9834e6e18
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-3.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-4.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-4.png
new file mode 100644
index 000000000..9d5cfe4fd
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-4.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-5.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-5.png
new file mode 100644
index 000000000..41081746a
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-5.png differ
diff --git a/public/images/mcp-gateway/github-copilot/visual-studio/step-6.png b/public/images/mcp-gateway/github-copilot/visual-studio/step-6.png
new file mode 100644
index 000000000..62811eea7
Binary files /dev/null and b/public/images/mcp-gateway/github-copilot/visual-studio/step-6.png differ
diff --git a/public/llms.txt b/public/llms.txt
index 7653c5098..4f767d0fd 100644
--- a/public/llms.txt
+++ b/public/llms.txt
@@ -1,4 +1,4 @@
-
+
# Arcade
@@ -151,6 +151,7 @@ Arcade delivers three core capabilities: Deploy agents even your security team w
- [Use Arcade in Claude Code](https://docs.arcade.dev/en/get-started/mcp-clients/claude-code): This documentation page guides users on how to connect Claude Code to an Arcade MCP Gateway using the Arcade Headers authentication mode. It outlines the prerequisites for setup, including creating an Arcade account, obtaining an API key, and creating an Arcade MCP Gateway, and provides step-by-step instructions for adding the gateway as a remote HTTP MCP server in Claude Code.
- [Use Arcade in Claude Desktop](https://docs.arcade.dev/en/get-started/mcp-clients/claude-desktop): This documentation page guides users on how to connect Claude Desktop to an Arcade MCP Gateway, detailing the necessary prerequisites and step-by-step instructions for setting up a custom connector. It emphasizes the importance of configuring the correct authentication settings and provides visual aids to facilitate the
- [Use Arcade in Cursor](https://docs.arcade.dev/en/get-started/mcp-clients/cursor): This documentation page provides a step-by-step guide for connecting Cursor to an Arcade MCP Gateway, enabling users to utilize Arcade tools effectively. It outlines the prerequisites for setup, including creating an Arcade account and obtaining an API key, and offers instructions for configuring Cursor
+- [Use Arcade in GitHub Copilot](https://docs.arcade.dev/en/get-started/mcp-clients/github-copilot): Documentation page
- [Use Arcade in Microsoft Copilot Studio](https://docs.arcade.dev/en/get-started/mcp-clients/copilot-studio): This documentation page provides a step-by-step guide for connecting Microsoft Copilot Studio to an Arcade MCP Gateway, enabling users to integrate and utilize Arcade tools within their agents. It outlines the prerequisites, configuration steps, and authorization process necessary for establishing the connection,
- [Use Arcade in Visual Studio Code](https://docs.arcade.dev/en/get-started/mcp-clients/visual-studio-code): This documentation page provides a step-by-step guide for connecting Visual Studio Code to an Arcade MCP Gateway, enabling users to set up and run their MCP server within the IDE. It outlines prerequisites, setup instructions, and authentication processes to ensure a successful integration.
- [Use Arcade tools with AG2](https://docs.arcade.dev/en/get-started/agent-frameworks/ag2/use-arcade-tools): Documentation page