# Gemini CLI extension

> The `permahost` extension connects Gemini CLI to the permahost.io MCP server and loads instructions into every session, so Gemini can publish files and static sites at permanent public URLs when you ask it to.

HTML version: https://permahost.io/docs/plugins/gemini/ · All docs: https://permahost.io/docs.md

## Install

Shell:

```
$ gemini extensions install https://github.com/tmphost/permahost
```

Gemini CLI installs extensions straight from a git URL. The manifest is `gemini-extension.json` at the root of the public repository [tmphost/permahost](https://github.com/tmphost/permahost).

## What it adds

| Part | What it does |
| --- | --- |
| MCP server `permahost` | HTTP server at `https://mcp.permahost.io/mcp` with the tools `uploadFile`, `downloadFile`, `listFiles`, `getUrl` and `listFolders` ([MCP tools](https://permahost.io/docs/mcp/)). |
| `GEMINI.md` | Context loaded into every session: when to use permahost.io, each tool, `textContent` for text files, multi-file sites in one folder, finding a folder to update, and credits. |

## Sign in

The server answers an unauthenticated request with `401`; Gemini CLI discovers the OAuth endpoints of app.permahost.io from it and opens the browser. Sign in or sign up. To start the sign-in by hand:

Gemini CLI:

```
> /mcp auth permahost
```

## Allow the tools

Gemini CLI asks before each tool call. To allow the permahost.io tools without asking, add a policy file such as `~/.gemini/policies/permahost.toml`:

~/.gemini/policies/permahost.toml:

```
[[rule]]
mcpName = "permahost"
decision = "allow"
priority = 100
```

Uploads without a folder id create folders, which spend credits every month, so allow them only if you are happy for Gemini to spend them unprompted.

## Try it

Gemini CLI:

```
> Publish this HTML report and give me the link.
```

Gemini uploads the file into a new folder with `format: "textContent"` and answers with its URL, such as `https://k7q2m9xa3bd.file.permahost.io/report.html`. The id and URL here are examples. Later: "Update the report on permahost with this new version": it finds the folder with `listFolders` and replaces the file at the same URL.

For large or binary files, Gemini does better with the [`permahost` CLI](https://permahost.io/docs/cli/) in its shell: it uploads from disk without passing the bytes through the conversation. See [plugin or CLI?](https://permahost.io/docs/plugins/#cli)

## Self-hosted permahost

Define a server named `permahost` in `~/.gemini/settings.json` that points at your server's MCP URL. A server defined there takes precedence over the extension's:

~/.gemini/settings.json:

```
{
  "mcpServers": {
    "permahost": { "type": "http", "url": "https://files.example.com/mcp" }
  }
}
```

## License

The plugin is licensed under the Apache License 2.0. The permahost server it connects to is AGPL-3.0-only.
