Arcade Documentation Style Guide
January 15, 2026 · View on GitHub
This guide covers writing standards for Arcade documentation. It applies to both human contributors and AI assistants.
Vale handles mechanical style checks (grammar, passive voice, etc.). This guide covers what Vale cannot: voice, structure, terminology, and judgment calls.
Voice and Tone
Be direct and confident
- Do: "Create a tool by adding the
@tooldecorator" - Don't: "You might want to consider creating a tool by possibly adding the
@tooldecorator"
Write for practitioners, not beginners
Assume readers know programming fundamentals. Don't explain what a function is, but do explain Arcade-specific concepts.
Use "you" for the reader
- Do: "You can configure the server with environment variables" or "Configure the server with environment variables"
- Don't: "Users can configure the server..." or "One can configure..."
Use "we" for Arcade
- Do: "We contributed elicitation to the MCP standard."
- Don't: "We will now build our sample app..." or "Let's get started!" (These refer to the reader like they are part of the Arcade team.)
Avoid marketing language
Documentation is not a sales pitch. State capabilities factually.
- Do: "Arcade handles OAuth token refresh automatically"
- Don't: "Arcade's amazing OAuth system seamlessly handles token refresh for you!"
Explain unfamiliar TypeScript terms
Many TypeScript users are familiar with JavaScript or Python and may need things like "zod" explained on the spot.
Arcade Terminology
Correct terms
| Use | Don't use |
|---|---|
| MCP server | MCP Server (unless starting a sentence), integration |
| tool | Tool (unless starting a sentence) |
| Arcade Engine | Arcade engine, the engine |
| auth provider | authentication provider (too long) |
| user authorization | user auth (spell it out) |
Product names (always capitalize)
- Arcade
- Arcade Cloud
- Arcade Engine
- MCP (Model Context Protocol)
Technical terms (lowercase unless starting sentence)
- tool, tools
- server, servers
- auth provider
- secret, secrets
- context
Structure
Default Page Structure (not for API references or overview pages)
Each page should have a a 10/20/70 format:
- Open with a sentence or two briefly covering what the page explains.
- The first paragraph should answer:
- Who this page was written for
- What it's about
- Why the information is useful
- When you'll need it
- Where you'll be using it
- How to move forward
- The remaining content should take about 70% of the page and expand on the promise of the first paragraph
Tutorial and Quickstart structure
- Title - What this page covers (H1)
- Intro line - One sentence explaining what the reader will learn
- Prerequisites (if applicable) - What the reader needs before starting
- Main content - Organized with H2/H3 headings
- Next steps (if applicable) - Where to go from here
Headings
- Use sentence case: "Create an MCP server" not "Create an MCP Server"
- Be specific: "Configure OAuth scopes" not "Configuration"
- Start with a verb for task-based docs: "Create...", "Configure...", "Deploy..."
Code examples
- Always show complete, runnable examples when possible
- Include imports
- Use realistic variable names, not
fooorbar - Add comments only when the code isn't self-explanatory
# Good
from arcade.sdk import tool
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""Send an email to the specified recipient."""
# Implementation here
return f"Email sent to {to}"
# Bad
from arcade.sdk import tool
@tool
def do_thing(x: str) -> str: # This does the thing
"""Do the thing."""
return x # Return the thing
Lists
- Use bullet points for unordered items
- Use numbered lists only for sequential steps
- Keep list items parallel in structure
What to include
Prerequisites
List what the reader needs:
- Required accounts (Arcade account, third-party service accounts)
- Required tools (CLI, SDK versions)
- Required knowledge (link to other docs if needed)
Error handling
When showing code that can fail, show how to handle errors:
try:
result = client.tools.execute(tool_name="Gmail.SendEmail", inputs={...})
except ArcadeError as e:
print(f"Tool execution failed: {e}")
Security considerations
When covering auth, secrets, or permissions, include security notes:
- Where credentials should be stored
- What scopes/permissions are actually needed (principle of least privilege)
- Any risks to be aware of
Next steps
If there is anything that people are expected to progress to, include links to those pages here.
Related content
Link to related useful materials:
- Resources—Cheat sheets, sample apps
- Related Guides and Tutorials
- Further reading: blog posts, concepts
What to avoid
Don't explain the obvious
# Bad - the comment adds nothing
# Import the tool decorator
from arcade.sdk import tool
Don't use placeholder URLs
- Do: Use
https://example.comor realistic-looking URLs - Don't: Use
https://your-url-here.comor<INSERT_URL>
Don't make promises about timing
- Do: "The token refreshes automatically when it expires"
- Don't: "The token refreshes automatically in about 5 minutes"
Don't dumb it down.
Avoid using language like "simple," "easy," "basic." It makes PhDs feel like the tool is too dumb and inexperienced engineers lose heart when they start to struggle although "it says this is easy..." Treat the reader and the tool with the neutral respect and dignity they both deserve. Don't infantilize them.
- Do: "Add the decorator to your function"
- Don't: "Simply add the decorator to your function"
Link to official docs rather than over explaining someone else's code/project/library
When explaining how something works, keep it brief and link out to the official docs.
MDX-specific guidelines
Callouts
Use the appropriate callout type:
<Note>- Additional helpful information<Warning>- Something that could cause problems<Tip>- Optional improvement or shortcut
Links
- Use relative links for internal docs:
[auth providers](/references/auth-providers) - Use descriptive link text: "See configuring OAuth" not "See here"
Code blocks
- Always specify the language:
```python,```typescript,```bash - Use
title="filename.py"when showing file contents - Use
{1,3-5}to highlight specific lines when needed
When fixing Vale issues
If you're an AI assistant fixing Vale-flagged issues:
- Preserve technical accuracy - Don't change code or technical details
- Keep the author's intent - Reword, don't rewrite
- Fix only what's flagged - Don't make unrelated improvements
- For passive voice - Only fix if active voice is clearer; passive is sometimes better for technical writing
- For toxic language flags - Always fix these, even if it means rewording significantly