# Advanced Features

> Bankr is extensible. Beyond the built-in tools, you can install **skills** from GitHub (or write your own), connect **MCP servers** so the agent can call your private APIs, and store **secure environment variables** for secrets like API keys.

# Advanced Features

Bankr is extensible. Beyond the built-in tools, you can install **skills** from GitHub (or write your own), connect **MCP servers** so the agent can call your private APIs, and store **secure environment variables** for secrets like API keys.

All of these are per-wallet — your skills, MCP servers, and env vars are private to you and sync across every surface the agent runs on, except that MCP servers aren't used on X or Farcaster.

## Skills

Skills are pre-packaged workflows the agent can load on demand. Think "a specialized prompt + optional reference docs" bundled together. A single skill might teach the agent how to add liquidity on a specific AMM, interpret a Zerion portfolio export, or format reports for a specific workflow you use.

### Install from GitHub

Just ask Bankr in chat:

```
install the ens skill from https://github.com/austintgriffith/ethskills/tree/master/skills/ens
```

The URL must point to a directory containing a `SKILL.md` file. Bankr fetches the skill, parses the frontmatter, pulls down any companion reference files, and registers it to your wallet. A repo URL works when the repo holds one skill; if it holds several (like [BankrBot/skills](https://github.com/BankrBot/skills)), Bankr lists them and asks you to re-run the install with the directory of the one you want.

See the [Bankr skill installation guide](/skills/for-other-agents/installation) for the full repo structure, [other available skills](/skills/for-other-agents/available-skills), and how to [contribute your own via PR](/skills/for-other-agents/contributing-skills).

### Manual Installation

If you don't want to push the skill to a public repo, paste the SKILL.md content directly in chat:

```
create a skill with this content:

---
name: my_workflow
description: Runs my custom portfolio report
tags: [portfolio, reporting]
---

# My Workflow
... skill instructions ...
```

Bankr validates the frontmatter, saves the skill to your private library, and makes it available via `use_skill` on any future turn.

### Using Installed Skills

Once installed, the agent picks the right skill automatically based on your question. You can also force it:

```
use the ens skill to register deployer.eth
```

Ask `what skills do I have?` to see your library.

:::tip Skill limits
Up to **50 skills per wallet**. Each `SKILL.md` is capped at 1MB, and each reference file is capped at 100KB. Plenty for prose instructions; not for stuffing a whole repo.
:::

## MCP Servers

[Model Context Protocol](https://modelcontextprotocol.io) servers expose tools to the agent over HTTP. Add an MCP server once and every tool it provides becomes callable through Bankr — Linear tickets, GitHub PRs, Notion pages, internal APIs, whatever the server exposes.

### Adding a Server

**Bankr Console**: open the account menu → **Connections**, then click **Connect** on the **Custom MCPs** card. Fill in the URL, transport (HTTP or SSE), and choose how the server authenticates:

- **None** — public servers that need no credentials.
- **Header** — send a static header (e.g. an API key) on every request. This is the mode shown below.
- **OAuth** — sign in to the provider through a popup, no key to paste. See [OAuth-gated servers](#oauth-gated-servers).

**Chat**: describe the server in plain English:

```
add an MCP server named "Linear" at https://mcp.linear.app/mcp
with Authorization header "Bearer {{LINEAR_API_KEY}}"
```

The `{{LINEAR_API_KEY}}` placeholder is a reference to a secure environment variable — see the next section. The agent stores the server config, hits the `tools/list` endpoint immediately to discover what tools the server provides, and caches the list.

### OAuth-Gated Servers

Some remote MCP servers require you to sign in with the provider instead of pasting a key. Pick **OAuth** as the auth mode when adding the server, then click **Connect** on the server card — a popup opens the provider's consent screen. Approve it, and Bankr exchanges the grant, discovers the server's tools, and marks the card **connected**. OAuth sign-in is rolling out provider by provider; the first is Coinbase at `https://agents.coinbase.com/mcp`. Where it isn't enabled yet, **Connect** fails and the card records an OAuth error; servers that authenticate with a key or header are unaffected.

Bankr keeps your access and refresh tokens in encrypted storage and refreshes them automatically — they're never shown in chat and never stored alongside the server config. OAuth servers don't take custom headers; the sign-in replaces them.

If a grant expires or is revoked, the card flips to **NOT CONNECTED** and tool calls stop until you click **Reconnect** and sign in again.

### Using MCP Tools

Once a server is added, the agent can call any tool it exposes. Ask naturally:

```
show my open Linear issues assigned to me
```

Bankr looks up the right Linear MCP tool and calls it. You can also:

- `list my MCP servers`
- `list tools from the Linear server`
- `remove the Linear server`
- `sync the Linear server` — re-fetches the tool list if the upstream server changed

:::tip MCP limits
Up to **20 MCP servers per wallet**. MCP tools run everywhere except X and Farcaster.
:::

## Secure Environment Variables

For secrets (API keys, tokens, private credentials) you never want echoed in chat or tool logs. Bankr stores them encrypted under a per-wallet namespace — the agent can pass the values to tools that need them, but the values are never surfaced back to the chat transcript.

Common uses:

- `LINEAR_API_KEY` referenced by an MCP server header
- `OPENAI_API_KEY` used by a skill that calls an external API
- Any secret an `execute_cli` script needs at runtime

### Setting Env Vars

**Bankr Console**: open the Bankr sidebar → **Tools** → **Environment Variables** → add key/value pairs. This is the recommended path — you type the value once, into a form, and it's written straight to the secret store.

**API**: `POST /agent/env`, `GET /agent/env`, `DELETE /agent/env/:key`. See the [Agent API reference](/agent-api/overview).

### Using Env Vars

The agent reads env vars automatically when a tool needs them. You refer to a var by name with the `{{VAR_NAME}}` placeholder, e.g. in an MCP server header:

```
Authorization: Bearer {{LINEAR_API_KEY}}
```

Or have a skill / `execute_cli` script read them from the environment.

### What the Agent Can See

- `GET /agent/env` returns **key names only** — the agent (and anyone asking it) can see _what_ secrets exist, never the values.
- Values are decrypted on-demand inside the tool runtime and never echoed back into the conversation.
- Reserved prefixes used internally by the platform (including `BANKR_*` and standard cloud-provider prefixes) are blocked to prevent shadowing platform config.

Ask `what env vars do I have?` to see the key list.

## Putting It Together

A typical advanced setup:

1. Install a handful of skills you use daily (`install skill from github ...`)
2. Add an MCP server or two for your work tools (Linear, Notion, GitHub)
3. Store the API keys each server needs as secure env vars
4. Reference them via `{{ENV_VAR}}` templates in the server configs

Now every time you chat with Bankr — from the web, Telegram, or the CLI — your full toolkit is available and the secrets stay locked away.
