Quickstart: install Wanaku and proxy an MCP tool call
Wanaku is a governed action proxy for AI agents. It sits between agents and backend systems, where it intercepts tool calls and enforces policy, identity, and data controls. Wanaku performs requested actions on behalf of agents, so agents never access backend systems directly.
This guide takes you from installation to a governed tool call in less than 10 minutes. You put the GitHub MCP server behind Wanaku. Wanaku keeps your GitHub token, and the MCP client never sees it.
Migrating from Classic Wanaku (Java)? Read Migrate from Classic Wanaku for an overview of the changes, compatibility considerations, and migration process.
Prerequisites
You need the following items:
- A terminal for running commands
- A GitHub account
curljq(optional, for formatting JSON output)
Quick Start
1. Install the Server
The installer downloads the archive of the latest stable release for your platform, verifies the checksum, and installs wanaku-server in $HOME/bin. It works on Linux and macOS:
curl -fsSL https://raw.githubusercontent.com/wanaku-ai/wanaku/main/get-wanaku.sh | bashTo use the headless variant, an archive, or a container image, read Install the Wanaku server and CLI.
2. Create a GitHub Token
The GitHub MCP server needs a GitHub token on every request, including discovery. Wanaku does not do the OAuth flow that the GitHub MCP server offers. Use a personal access token.
Create a fine-grained personal access token. For this guide, give it read-only access to public repositories.
Export the token in the terminal where you start Wanaku:
bashexport GITHUB_PAT=<your-token>
Use a read-only token for this guide. The configuration in the next step permits every tool call in the default namespace.
3. Write the Configuration
Create a file named wanaku.yaml in the current directory:
forwards:
- name: github
address: "https://api.githubcopilot.com/mcp/"
namespace: default
credential_bindings:
discovery: github-pat
invocation: github-pat
bindings:
- id: github-pat
forward_id: github
origin: "https://api.githubcopilot.com:443"
mechanism:
type: bearer
secret_refs:
- "env:GITHUB_PAT"
allowed_purposes:
- discovery
- invocation
governance:
namespaces:
default:
# Permit actions that no action-policy rule or evaluator matches.
# Remove this override when you add policies for the namespace.
no_match: allowThe file has three parts:
- The forward connects Wanaku to the hosted GitHub MCP server. Wanaku discovers its tools in the
defaultnamespace. - The binding tells Wanaku how to authenticate to the server. Wanaku reads the token from
GITHUB_PATand sends it asAuthorization: Bearer <token>. Wanaku sends the token only to theoriginin the binding. - The governance override permits the tool calls. Without it, Wanaku denies every tool call, resource read, and prompt request.
The no_match: allow override removes the default-deny baseline for the default namespace. It applies to tools/call, resources/read, and prompts/get. Use it only to get started.
The action-policy filter and the evaluator filter apply no_match independently. Each filter must allow a request. When you remove the override and keep no_match: deny, a governed request needs both of these:
- An action-policy rule that allows it.
- An evaluator whose trigger matches it, and whose processor passes it.
If only one of the filters matches, the other filter denies the request with its no-match error. For a complete example, see Govern an MCP server.
NOTE
The wanaku.yaml file in the repository root is a sample for development. It registers test forwards on localhost. Do not use it as a start point for a deployment.
4. Run the Server
Start the server in the terminal where you exported GITHUB_PAT:
wanaku-server --wanaku-config ./wanaku.yamlThe server listens on these ports on all network interfaces:
8080: management API and admin UI8081: MCP endpoint8083: inference proxy8084: A2A listener
The next steps use ports 8080 and 8081. Read Wanaku ports and endpoints for the addresses.
To run Wanaku as a container or as a systemd service, pass GITHUB_PAT to the server and mount the file. Read Pass secrets to the Wanaku server, Run Wanaku in a container or Run Wanaku as a systemd service. For a production system, read Deploy Wanaku on Kubernetes and OpenShift.
If the file does not exist, the server logs wanaku config not found, using defaults and starts with the fail-safe defaults.
5. Check the Forward
Open another terminal. Get the forward status from the management API:
curl -s http://localhost:8080/api/v1/forwards | jq '.data[] | {name, available, statusMessage}'The github forward shows "available": true. Wanaku connected to the GitHub MCP server with your token and discovered its tools.
If available is false, the statusMessage field tells you the cause. For example, requires authentication (HTTP 401) means that the server process did not get a valid token. Read Troubleshooting Authentication Failures.
6. List the Tools
Send an MCP tools/list request to the default namespace:
curl -s -X POST http://localhost:8081/default/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}' | jq '.result.tools[].name'The response lists the GitHub tools, for example get_me and search_repositories. Wanaku returns the list from its registry. It does not call GitHub for this request.
7. Call a Tool
Call the get_me tool. It returns the GitHub user that owns the token:
curl -s -X POST http://localhost:8081/default/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "id": 2, "params": {"name": "get_me", "arguments": {}}}' | jq .The response contains your GitHub user. The request did not contain a token. Wanaku checked the governance posture, added the token from the binding, and sent the call to GitHub. Wanaku also removes the token from the response before it returns the result. The MCP client never sees the token.
To use the tools from an agent, configure your MCP client with the endpoint http://localhost:8081/default/mcp.
How Wanaku Processes the Request
Each MCP request goes through the filter pipeline. The pipeline parses the JSON-RPC body and gets the namespace from the URL path. For tools/list, it returns the tools from the in-memory registry. For tools/call, the governance filters decide first, and then Wanaku forwards the allowed call to the upstream server with the brokered credential. Read Architecture for the filter order and Tool Routing for tools/call.
Next steps
- Govern AI agent tool calls: replace
no_match: allowwith action policies and evaluators. - Keep API keys away from AI agents with credential brokerage: learn how bindings scope a credential.
- Connect upstream MCP servers with forwards: register more upstream servers.
- Give each team its own MCP endpoint with namespaces: isolate tools for each team.
- Install the Wanaku server and CLI: install the CLI, the headless variant, or a container image.
- Use the Wanaku Admin UI: open
http://localhost:8080to see the forward and its tools in a browser. - FAQ and troubleshooting: find the cause of common problems.