32 lines
1.7 KiB
Markdown
32 lines
1.7 KiB
Markdown
# MCP servers
|
|
|
|
Four independent Streamable HTTP MCP servers, each in its own directory with its own README and tests:
|
|
|
|
- `coding-agent-mcp` - scoped workspace editing.
|
|
- `dev-server-mcp` - authenticated facade for an allowlisted development-server worker (the same image runs the facade and the worker).
|
|
- `browser-mcp` - Playwright automation restricted to exact allowed origins.
|
|
- `minio-mcp` - bounded list/read/stat/write access to object storage.
|
|
|
|
This repository holds their code. **Deploying them is a separate repository**,
|
|
[`mcps-docker-compose`](https://gitea-s2i2s.isti.cnr.it/lelii/mcps-docker-compose): the compose files,
|
|
the gateway's Caddyfiles, the example `.env` and the documentation of every environment variable. It pulls
|
|
the images published from here, so a server needs no sources and no build toolchain.
|
|
|
|
## Publishing the images
|
|
|
|
```sh
|
|
docker login -u luciolelii # once; use an access token with read and write permission
|
|
./publish-images.sh # all four
|
|
./publish-images.sh minio-mcp # or just some
|
|
```
|
|
|
|
Each image is built for `linux/amd64` and `linux/arm64` and pushed to `luciolelii/<name>` tagged with
|
|
this repository's commit hash and `latest`. The script refuses to run on a dirty working tree, because
|
|
the tag names a commit. Afterwards, deploy by setting `MCP_IMAGE_TAG` in the deployment repository (or
|
|
the default in its `mcp-stack.compose.yml`) to the printed hash.
|
|
|
|
The dev-server image fixes its user at `10001:10001` when it is built, because the two volumes its worker
|
|
mounts take their owner from the image. See the deployment repository for what that means at run time.
|
|
|
|
Tests: `npm test` inside each server's directory.
|