Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2fef6a1
tentatively scaffolds new folder structure—very breaking, much sad
nearestnabors Dec 30, 2025
0ba0db6
Organize guides and resources.
nearestnabors Dec 30, 2025
f3c7c3a
Update all internal documentation links to new IA structure
nearestnabors Dec 30, 2025
5ab7b91
Add server-side redirects for old URLs to new IA structure
nearestnabors Dec 30, 2025
67c1e41
Fix remaining /home/ links throughout documentation
nearestnabors Dec 30, 2025
d9c3dab
🤖 Regenerate LLMs.txt
github-actions[bot] Dec 30, 2025
0ec6ce3
fixing missing closing brackets
nearestnabors Jan 2, 2026
227a074
fix broken has links
nearestnabors Jan 2, 2026
4403e7e
fix duplicate links
nearestnabors Jan 2, 2026
dbd6b52
update broken links
nearestnabors Jan 2, 2026
65f1489
more broken link and md fixes
nearestnabors Jan 2, 2026
dc0930c
fix moar links
nearestnabors Jan 2, 2026
6b35fdd
update broken links
nearestnabors Jan 2, 2026
f8d1bae
correct infinite redirects
nearestnabors Jan 2, 2026
dfb98a1
fixing some messed up redirects and blank links
nearestnabors Jan 2, 2026
926ca3f
🤖 Regenerate LLMs.txt
github-actions[bot] Jan 2, 2026
f75e216
fix auth providers url generation
nearestnabors Jan 2, 2026
e18b540
Fix 75 broken links and resolve routing issues
nearestnabors Jan 2, 2026
a04d222
fix: make documentation routing language-agnostic
nearestnabors Jan 3, 2026
45db510
Update old redirect paths and remove knownRedirects from test file
nearestnabors Jan 3, 2026
212ef26
update reroutes
nearestnabors Jan 3, 2026
78af83c
remove and don't track .bak
nearestnabors Jan 3, 2026
b96e14e
fix malformed urls
nearestnabors Jan 3, 2026
2ccfca6
Merge branch 'origin/main' into new-ia-backup - resolved conflicts
nearestnabors Jan 3, 2026
ca197e4
Rectifying merge conflicts
nearestnabors Jan 3, 2026
ee648dd
Merge branch 'origin/main' into new-ia-backup - resolved new conflicts
nearestnabors Jan 3, 2026
f41d1bf
🤖 Regenerate LLMs.txt
github-actions[bot] Jan 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .github/scripts/update-example-dates.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,10 @@ async function updateExampleDates() {
console.log("Parsing repositories from MDX file...");

// Read the current MDX file
const mdxPath = path.join(__dirname, "../../app/en/home/examples/page.mdx");
const mdxPath = path.join(
__dirname,
"../../app/en/resources/examples/page.mdx"
);
let content = fs.readFileSync(mdxPath, "utf8");

// Parse repositories from the MDX file
Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/translate-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ on:
type: boolean

single_file:
description: "Single file to translate (relative to app/en, e.g. 'home/page.mdx')"
description: "Single file to translate (relative to app/en, e.g. 'resources/examples/page.mdx')"
required: false
default: ""
type: string
Expand Down Expand Up @@ -121,14 +121,14 @@ jobs:
else
echo "Changes detected"
echo "has_changes=true" >> $GITHUB_OUTPUT

# Count changed files
CHANGED_FILES=$(git diff --name-only | wc -l)
STAGED_FILES=$(git diff --cached --name-only | wc -l)
TOTAL_CHANGES=$((CHANGED_FILES + STAGED_FILES))

echo "changed_files=$TOTAL_CHANGES" >> $GITHUB_OUTPUT

# Get list of changed locales
CHANGED_LOCALES=$(git diff --name-only | grep -E '^app/(es|pt-BR)/' | cut -d'/' -f2 | sort -u | tr '\n' ',' | sed 's/,$//')
if [ -z "$CHANGED_LOCALES" ]; then
Expand Down Expand Up @@ -213,22 +213,22 @@ jobs:
head: '${{ steps.branch_name.outputs.branch_name }}',
base: 'main',
body: `## 📖 Automated Translation Update

This PR contains automated translations generated by the GitHub Actions workflow.

### 📊 Translation Summary
- **Target Locale**: ${{ inputs.target_locale }}
- **Files Changed**: ${{ steps.check_changes.outputs.changed_files }}
- **Locales Updated**: ${{ steps.check_changes.outputs.changed_locales }}

### ⚙️ Configuration Used
- **Force Translate**: ${{ inputs.force_translate }}
- **Cleanup Deleted Files**: ${{ inputs.cleanup_deleted }}
- **Dry Run**: ${{ inputs.dry_run }}
- **Single File**: ${{ inputs.single_file || 'None (all files)' }}
- **Concurrency**: ${{ inputs.concurrency }}
- **Model**: gpt-4o-mini

### 🔍 Review Guidelines
Please review the translations for:
- [ ] Accuracy and context preservation
Expand All @@ -237,10 +237,10 @@ jobs:
- [ ] Code blocks and inline code unchanged
- [ ] Markdown formatting preserved
- [ ] Brand names (Arcade, Arcade Engine, Control Plane) kept in English

### 🚀 Auto-generated
This PR was automatically created by the \`translate-docs.yml\` GitHub Action.

**Triggered by**: @${{ github.actor }}
**Workflow Run**: [${{ github.run_id }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})`,
draft: false
Expand Down
2 changes: 1 addition & 1 deletion _dictionaries/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export default {
lastUpdated: "Last updated on",
notFound: "This page could not be found",
poweredBy: "Powered by",
editPage: "Edit this page on GitHub",
editPage: "Edit this page on GitHub",
by: "by",
banner: {
aiTranslation:
Expand Down
6 changes: 3 additions & 3 deletions app/_components/logo.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import { Arcade, Badge } from "@arcadeai/design-system";
import { Arcade } from "@arcadeai/design-system";
import ArcadeLogo from "@arcadeai/design-system/assets/images/arcade-logo";

export function Logo() {
return (
<>
<div className="mr-2 hidden w-40 flex-row lg:flex lg:items-end lg:gap-2.5">
<ArcadeLogo className="h-7 w-auto invert dark:invert-0" />
<Badge
{/* <Badge
className="relative top-0.5 font-medium font-mono text-xs"
variant="outline"
>
Docs
</Badge>
</Badge> */}
</div>

<div className="mr-16 block w-6 lg:hidden">
Expand Down
9 changes: 5 additions & 4 deletions app/_components/starter-tool-info.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const StarterToolInfo: React.FC<StarterToolInfoProps> = ({ toolkitName }) => (
<p>
{toolkitName} is a{" "}
<u>
<a href="/home/use-tools/types-of-tools#starter-tools">
<a href="/create-tools/performance/types-of-tools#starter-tools">
Starter MCP Server
</a>
</u>
Expand All @@ -21,15 +21,16 @@ const StarterToolInfo: React.FC<StarterToolInfoProps> = ({ toolkitName }) => (
<p>
Differently from{" "}
<u>
<a href="/home/use-tools/types-of-tools#optimized-tools">
<a href="/create-tools/performance/types-of-tools#optimized-tools">
Optimized MCP Servers
</a>
</u>
, Starter tools are heavily influenced by the original API design, which
is not usually optimized for LLM usage. For this reason, we recommend
thoroughly evaluating the tools with your Agents or chatbots before using
it in production. <a href="/home/use-tools/types-of-tools">Read more</a>{" "}
about Optimized vs Starter tools.
it in production.{" "}
<a href="/create-tools/performance/types-of-tools">Read more</a> about
Optimized vs Starter tools.
</p>
</Callout>
);
Expand Down
4 changes: 2 additions & 2 deletions app/_components/tool-info.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import {
} from "@arcadeai/design-system";
import { usePathname } from "next/navigation";
import type React from "react";
import { findToolkitFromPath } from "../en/mcp-servers/components/toolkit-utils";
import { TYPE_CONFIG } from "../en/mcp-servers/components/type-config";
import { findToolkitFromPath } from "../en/resources/integrations/components/toolkit-utils";
import { TYPE_CONFIG } from "../en/resources/integrations/components/type-config";

type ToolInfoProps = {
description: string;
Expand Down
56 changes: 44 additions & 12 deletions app/en/_meta.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,57 @@
import {
Book,
BookOpen,
GraduationCap,
Home,
Pencil,
Ruler,
} from "lucide-react";
import type { MetaRecord } from "nextra";

const meta: MetaRecord = {
function TitleWithIcon({
icon: Icon,
children,
}: {
icon: React.ComponentType<{ className?: string }>;
children: React.ReactNode;
}) {
return (
<span className="flex items-center gap-2 font-medium text-gray-950 dark:text-white">
<Icon className="size-4" />
{children}
</span>
);
}

export const meta: MetaRecord = {
"*": {
theme: {
copyPage: false,
copyPage: true,
},
},
home: {
type: "page",
title: "Home",
href: "/get-started",
title: <TitleWithIcon icon={Home}>Docs Home</TitleWithIcon>,
theme: {
breadcrumb: false,
layout: "full",
toc: false,
copyPage: false,
},
},
"get-started": {
title: <TitleWithIcon icon={BookOpen}>Get Started</TitleWithIcon>,
},
resources: {
title: <TitleWithIcon icon={Pencil}>Resources</TitleWithIcon>,
},
guides: {
title: <TitleWithIcon icon={Ruler}>Guides</TitleWithIcon>,
},
"mcp-servers": {
type: "page",
title: "MCP Servers",
href: "/mcp-servers",
learn: {
title: <TitleWithIcon icon={Book}>Learn</TitleWithIcon>,
},
references: {
type: "page",
title: "API & SDKs",
href: "/references",
title: <TitleWithIcon icon={GraduationCap}>References</TitleWithIcon>,
},
};

Expand Down
9 changes: 9 additions & 0 deletions app/en/get-started/_meta.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
"about-arcade": "About Arcade",
setup: "Setup",
quickstarts: "Quickstarts",
};

export default meta;
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
---
title: "How Arcade helps"
title: "How Arcade helps with Agent Authorization"
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
# About Arcade

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.

Expand All @@ -17,7 +15,7 @@ Authenticating to retrieve information, however, is not the only challenge. Agen

Without auth, AI agents are severely limited in what they can do.

### How Arcade solves this
## 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.

Expand All @@ -27,19 +25,19 @@ With Arcade, developers can now create agents that can _act as the end users of
- Sending or reading email
- Answering questions about files in Google Drive.

### Auth permissions and scopes
## 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
## 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).
To learn how Arcade allows for actions (tools) to be authorized through OAuth2 and how to implement it, check out [Authorized Tool Calling](/guides/tool-calling/custom-apps/authorized-tool-calling).

### Tools that don't require authorization
## 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.

Expand Down
9 changes: 9 additions & 0 deletions app/en/get-started/quickstarts/_meta.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
"call-tool-agent": "Call tools in agents",
"call-tool-client": "Call tools in IDE/MCP clients",
"mcp-server-quickstart": "Build an MCP server for custom tools",
};

export default meta;
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Install and use the Arcade client to call Arcade Hosted Tools.
<GuideOverview.Prerequisites>

- An <SignupLink linkLocation="docs:call-tools-directly">Arcade account</SignupLink>
- An [Arcade API key](/home/api-keys)
- An [Arcade API key](/get-started/setup/api-key)
- The [`uv` package manager](https://docs.astral.sh/uv/getting-started/installation/) if you are using Python
- The [`bun` runtime](https://bun.com/) if you are using TypeScript

Expand Down Expand Up @@ -376,7 +376,7 @@ console.log(respose_send_email.output?.value);

## 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).
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](/guides/agent-frameworks/langchain/python section, or [how to build your own tools](/guides/create-tools/tool-basics/build-mcp-server).

## Example Code

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ Get the URL of your MCP Gateway by clicking the "Copy URL" button in the MCP Gat

<Callout type="info">
You can get an API key from the dashboard, following these instructions:
[Getting Your API Key](/home/api-keys).
[Getting Your API Key](/get-started/setup/api-key).

The user ID is the email address that
you used to sign up for the Arcade account.
Expand All @@ -203,8 +203,8 @@ As you interact with the agent, it will call the tools from the MCP Gateway. You

## Next Steps

- Learn more about [MCP Gateways](/home/mcp-gateways).
- Learn more about [MCP Gateways](/guides/create-tools/mcp-gateways.
- Learn how to use MCP Gateways with:
- [Cursor](/home/mcp-clients/cursor)
- [Visual Studio Code](/home/mcp-clients/visual-studio-code)
- Build your own MCP servers with [arcade-mcp](/home/custom-mcp-server-quickstart).
- [Cursor](/guides/tool-calling/mcp-client/visual-studio-code)
- [Visual Studio Code](/guides/tool-calling/mcp-client/visual-studio-code)
- Build your own MCP servers with [arcade-mcp](/get-started/quickstarts/mcp-server-quickstart).
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ uv run server.py stdio
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
secrets](/guides/create-tools/tool-basics/create-tool-secrets) guide for more
information.
</Callout>

Expand All @@ -180,8 +180,8 @@ For HTTP transport, view your server's API docs at [http://127.0.0.1:8000/docs](
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.
Arcade Deploy](/guides/deployment-hosting/arcade-deploy) guide or the [on-prem MCP
server](/guides/deployment-hosting/on-prem guide for secure remote deployment.
</Callout>

</Tabs.Tab>
Expand Down Expand Up @@ -267,8 +267,8 @@ Ensure you have set the environment variable in your terminal or `.env` file, an

## Next Steps

- **Learn how to write a tool with auth**: [Create a tool with auth](/home/build-tools/create-a-tool-with-auth)
- **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 write a tool with auth**: [Create a tool with auth](/guides/create-tools/tool-basics/create-tool-auth)
- **Learn how to write a tool with secrets**: [Create a tool with secrets](/guides/create-tools/tool-basics/create-tool-secrets)
- **Learn more about the Context object**: [Tools and Context](/guides/create-tools/tool-basics/runtime-data-access)
- **Learn how to write tool evaluations**: [Create an evaluation suite](/guides/create-tools/evaluate-tools/create-evaluation-suite) to optimize them for LLM usage
- **Learn how to deploy your MCP server**: [Deploy your MCP server](/guides/deployment-hosting/arcade-deploy)
8 changes: 8 additions & 0 deletions app/en/get-started/setup/_meta.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
"api-keys": "Get an API key",
"connect-arcade-docs": "Connect Arcade docs to your IDE",
};

export default meta;
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,5 @@ The CLI will automatically:

Once you have your API key, you can:

- [Start using tools](/home/quickstart)
- [Create custom tools](/home/build-tools/create-a-mcp-server)
- [Start using tools](/get-started/quickstarts/call-tool-agent)
- [Create custom tools](/guides/create-tools/tool-basics/build-mcp-server)
Loading
Loading