Skip to main content

vitrine

ci python license

Shareable links for what your AI agent makes. vitrine is a small, self-hosted MCP server. Your agent publishes an HTML report, a chart, a PDF or a folder of files, and gets back a link that opens in any browser.

  • Private by default. Links are signed, expire and can be revoked. An artifact becomes public only after you approve it.
  • One link per artifact. When the agent revises it, the link stays the same.
  • Any MCP client. Claude Code, Hermes Agent, or anything that speaks MCP over HTTP.
  • Easy to run. One process, one port, one folder of files. No database.

Install

With uv (it fetches Python 3.15 for you):

uvx mcp-vitrine --version          # run without installing
uv tool install mcp-vitrine        # or install the `mcp-vitrine` command

Or with Docker. stable is the newest release; for a deployment, pin a version from the releases instead:

docker pull ghcr.io/edgar971/vitrine:stable

Run it

vitrine needs a secret, to sign links, and one token per client:

export VITRINE_SECRET="$(uvx mcp-vitrine secret new)"
uvx mcp-vitrine token new claude
# token: 3AVjpX77…            ← give this to the client
# entry: claude:65b2dd…:read+write+share+publish
export VITRINE_TOKENS="claude:65b2dd…:read+write+share+publish"   # the entry it printed
uvx mcp-vitrine serve              # http://localhost:8080, data in ./data

With Docker, the same commands run inside the image:

docker run --rm ghcr.io/edgar971/vitrine:stable secret new
docker run --rm ghcr.io/edgar971/vitrine:stable token new claude
docker run -d --name vitrine -p 127.0.0.1:8080:8080 -v vitrine-data:/data \
  -e VITRINE_SECRET=<secret> -e VITRINE_TOKENS=<entry> \
  ghcr.io/edgar971/vitrine:stable

Check that it works, using the token that token new printed:

export VITRINE_TOKEN=<token>
echo '<h1>hello</h1>' > index.html
curl -s -H "Authorization: Bearer $VITRINE_TOKEN" -F title=Hello -F file=@index.html \
  localhost:8080/api/artifacts
# {"id": "…", "url": "http://localhost:8080/s/…/", …}

Open the url: a private, expiring link to your page.

Connect your agent

vitrine serves MCP at /mcp, authenticated with a bearer token.

Claude Code

claude mcp add --transport http vitrine http://localhost:8080/mcp \
  --header "Authorization: Bearer $VITRINE_TOKEN"

Any other MCP client that supports remote servers with headers:

{
  "mcpServers": {
    "vitrine": {
      "url": "http://localhost:8080/mcp",
      "headers": { "Authorization": "Bearer <token>" }
    }
  }
}

Hermes Agent connects the same way, and an optional plugin publishes files from disk: see integrations/hermes.

Give each client its own token, so you can revoke one without the others. Grant only the scopes it needs: token new ci --scopes read,write cannot share links or make anything public.

Use it

Ask your agent for something you would open in a browser:

Build an HTML report of last month's energy use and share it with me.

Update the report with this week's numbers. (same link, new version)

Make that report public. (you are asked to approve first)

What the agent can do:

Tool Scope Does
artifact_create write Publish text files (HTML, Markdown, CSV, SVG, …) and get a private link
artifact_update write Add a version behind the same link
artifact_upload_url write A single-use upload URL for binaries and large files
artifact_delete write Remove an artifact and every link to it
artifact_get / artifact_list read Read an artifact back, or find earlier ones
artifact_link share A fresh private link, with its own expiry
artifact_revoke_links share Revoke every private link issued so far
artifact_set_visibility publish Make an artifact public, after you approve

Approval goes through your MCP client's confirmation prompt. If the client cannot ask, or you decline or don't answer, the artifact stays private.

Beyond localhost

Set VITRINE_PUBLIC_BASE_URL to the address people will open, for example https://vitrine.example.com, and put vitrine behind TLS. Ready-made setups are in examples: Compose with Caddy, and Kubernetes. Backups, upgrades and monitoring are in operations, and every setting is in the configuration reference.

Learn more

  • Documentation: how it works, the spec, the security model, and how to contribute.
  • Changelog
  • Found a vulnerability? Follow SECURITY.md rather than opening an issue.

MIT licensed.

Metadata

Release files for mcp-vitrine 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-vitrine 0.1.0
File Size Uploaded
mcp_vitrine-0.1.0.tar.gz 76.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-vitrine 0.1.0
File Interpreter ABI Platform
mcp_vitrine-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 170.7 kB

Release files / mcp_vitrine-0.1.0.tar.gz

Download URL mcp_vitrine-0.1.0.tar.gz
Size 76.4 kB
Tags Source
SHA-256 checksum
How to use checksums
4b2d724545aef71e8c13ecaa37de7980a5dc4e738300a6f2d09261bd0d99dbd2
BLAKE2b-256 checksum
How to use checksums
44b1723704f14b8f9323daf09351a5068628293d715f34c71215977115ca0630
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / mcp_vitrine-0.1.0-py3-none-any.whl

Download URL mcp_vitrine-0.1.0-py3-none-any.whl
Size 94.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7353f45d0f2d60e8e8b32fdd5d849dd078e752b5067b670431b44e11f0fd3bb8
BLAKE2b-256 checksum
How to use checksums
052d5475ea60d50b0f30a3960ff18d9ab7555ddb363f9e182d6c8981813c6f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page