Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/en/home/build-tools/_meta.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export default {
"create-a-mcp-server": "Create a MCP Server",
"create-a-mcp-server": "Create an MCP Server",
"tool-context": "Tools and Context",
"create-a-tool-with-auth": "Create a tool with auth",
"create-a-tool-with-secrets": "Create a tool with secrets",
Expand Down
24 changes: 2 additions & 22 deletions app/en/home/build-tools/create-a-mcp-server/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ Build and run an MCP Server with tools that you define.

<GuideOverview.Prerequisites>

- An [Arcade account](https://api.arcade.dev/signup)
- For this guide, we'll use [uv](https://docs.astral.sh/uv/getting-started/installation/) as our package manager.

</GuideOverview.Prerequisites>
Expand Down Expand Up @@ -62,7 +61,7 @@ This generates a complete project with:

- **server.py** Main server file with MCPApp and example tools
- **pyproject.toml** Dependencies and project configuration
- **.env.example** Example `.env` file containing a secret required by one of the generated tools in `server.py`
- **.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.**

`server.py` includes proper structure with command-line argument handling. It creates an `MCPApp`, defines tools with `@app.tool`, and runs with `app.run()`:

Expand Down Expand Up @@ -103,29 +102,10 @@ if __name__ == "__main__":

Run your MCP Server using one of the with the following commands in your terminal:

<Tabs
items={["HTTP transport (default)", "stdio transport (for Claude Desktop)"]}
storageKey="preferredTransport"
>

<Tabs.Tab>

```bash
uv run server.py http
uv run server.py
```

For HTTP transport, view your server's API docs at [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).

</Tabs.Tab>
<Tabs.Tab>

```bash
uv run server.py stdio
```

</Tabs.Tab>
</Tabs>

You should see output like this in your terminal:

```bash
Expand Down
6 changes: 4 additions & 2 deletions app/en/home/build-tools/tool-context/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ Let's walk through an example (or skip to [the full code](#example-code)).

### Logging

Send log messages at different levels using the `log` attribute of the `Context` object:
[Logging in MCP](https://modelcontextprotocol.io/specification/2025-06-18/server/utilities/logging) provides a standardized channel for servers to emit structured, leveled messages to clients. Logging is useful for observability, debugging, and user feedback during tool execution.

You can send log messages at different levels using the `log` attribute of the `Context` object like this:

```python
await context.log.debug("Debug message")
Expand Down Expand Up @@ -228,7 +230,7 @@ async def process_with_progress(
return results


# The Context provides at runtime (via TDK wrapper):
# The Context provides at runtime:
# - context.user_id: ID of the user making the request
# - context.get_secret(key): Retrieve a secret value (raises if missing)
# - context.log.<level>(msg): Send log messages to the client (debug/info/warning/error)
Expand Down