# tunnels.io

**Category:** 💰 Finance & Fintech  
**Repository:** https://github.com/tunnels-io/tunnels-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/tunnels-io

## Description
Read a tunnels.io account and put local ports online. Lists only the tools the token was granted.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "tunnels-io": {
    "command": "npx",
    "args": ["-y","tunnels-io"]
  }
}
```

## Documentation & README

# tunnels-mcp

MCP server for [tunnels.io](https://tunnels.io).

It runs locally, holds one CLI token, and gives an assistant read access to the
account. It can also open a tunnel.

## Install

Download a binary for your platform from the
[releases page](https://github.com/tunnels-io/tunnels-mcp/releases), or build it:

```
go install github.com/tunnels-io/tunnels-mcp/cmd/tunnels-mcp@v0.0.2
```

Clients that take MCP bundles, such as Claude Desktop, can install
`tunnels-mcp-<version>.mcpb` from the same page. It asks for the token.

The server is listed in the MCP Registry as `io.github.tunnels-io/tunnels-mcp`.

## Token

Create one at `tunnels.io/account/tokens`. Tick the permissions you want.

Skipping a permission is not a broken tool. The server reads the token's
permissions at startup and lists only the tools that work.

An older all-access token (`*`) works for everything except billing, domains
and cloud apps. Those three services refuse `*`, so the server does not list
their tools for such a token. Make a token on the page above to reach them.

```
TUNNELS_TOKEN     required, starts tnl_
TUNNELS_API       default https://tunnels.io
TUNNELS_CLI       default "tunnels" on PATH
TUNNELS_INSPECT   unset. The CLI inspector is off; set an address to enable it.
```

A config file works too, at `~/.config/tunnels/mcp.json`:

```json
{ "token": "tnl_..." }
```

The environment wins.

## Client setup

```json
{
  "mcpServers": {
    "tunnels": {
      "command": "tunnels-mcp",
      "env": { "TUNNELS_TOKEN": "tnl_..." }
    }
  }
}
```

## Tools

| Tool | Permission |
|---|---|
| `list_tunnels` | `tunnels:read` |
| `get_usage` | `usage:read` |
| `get_metrics` | `usage:read` |
| `get_account` | `account:read` |
| `list_tokens` | `tokens:read` |
| `list_invoices` | `billing:read` |
| `list_domains` | `registrar:read` |
| `list_notifications` | `notifications:read` |
| `list_cloud_apps` | `cloud:read` |
| `start_tunnel` | none |
| `stop_tunnel` | none |

Reads only, apart from the last two. Those shell out to the `tunnels` CLI, which
must be on PATH. No tool changes a plan, buys a domain or deploys anything.

`start_tunnel` takes `http` (the default, served as HTTPS on the public URL) or
`tcp`.

## Token handling

The token goes to tunnels.io in a Bearer header, and to the CLI through the
environment. Never a command line. Never a log. Never a tool result.

Error bodies are redacted before they are shown.

The server contacts tunnels.io and nothing else.

## Build

```
make check
make build
```

No dependencies.

## Release

Push a tag such as `v0.0.2`. The `release` workflow builds six binaries and
the MCPB bundle, creates the GitHub release, and publishes `server.json` to the
MCP Registry. To build the same files locally, on macOS:

```
make release V=0.0.2
```

## Licence

MIT. See [LICENSE](https://github.com/tunnels-io/tunnels-mcp/blob/HEAD/LICENSE).

