Sustainable LibreChat setup: official manifest, config layer, brand overlay
- CloudronManifest.json: byte-identical copy of the OFFICIAL appstore manifest (the hand-edited one stripped addons and crash-looped the app on 2026-10-18) - Dockerfile: pinned base (202610150224320000), brand assets only + title sed - librechat.yaml: schema 1.3.17; chat models only in picker (qwen-image moved to the agent image tool); speech via gateway with capped key refs; SearXNG web search; inference-docs MCP server; forward-compatible interface.theme - mcp/server.py: docs MCP server (stdio, stdlib-only, tool search_docs) - assets/: co-op logo + favicons/PWA icons
No files matched your search
@@ -0,0 +1,2 @@
|
||||
.git
|
||||
*.md
|
||||
@@ -1,11 +1,53 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "io.inference.librechat.custom",
|
||||
"title": "LibreChat (Co‑op custom)",
|
||||
"description": "LibreChat sandbox with Inference‑Co‑op branding and image‑generation support.",
|
||||
"version": "1.3.1",
|
||||
"author": "Inference Co‑op",
|
||||
"healthCheckPath": "/",
|
||||
"httpPort": 3080,
|
||||
"icon": "logo-coop.png"
|
||||
}
|
||||
"id": "ai.librechat.cloudronapp",
|
||||
"version": "1.4.1",
|
||||
"title": "LibreChat",
|
||||
"upstreamVersion": "0.8.8",
|
||||
"author": "Danny Avila",
|
||||
"description": "LibreChat is an open-source chatbot client that supports multiple AI providers and models including:\n\n- OpenAI GPT Models\n- Anthropic Claude Models\n- Google PaLM Models\n- Various open-source local models\n\nFeatures:\n- Switch between various AI models\n- Conversation history\n- Plugins support\n- File upload and processing\n- Custom instructions\n- Multiple conversation modes\n\n",
|
||||
"changelog": "* Update uv to 0.13.1\n",
|
||||
"tagline": "ChatGPT-like interface with model switching",
|
||||
"website": "https://github.com/danny-avila/LibreChat",
|
||||
"documentationUrl": "https://docs.cloudron.io/packages/librechat/",
|
||||
"forumUrl": "https://forum.cloudron.io/category/210/librechat",
|
||||
"contactEmail": "support@cloudron.io",
|
||||
"healthCheckPath": "/health",
|
||||
"httpPort": 3080,
|
||||
"addons": {
|
||||
"postgresql": {},
|
||||
"mongodb": {},
|
||||
"localstorage": {},
|
||||
"oidc": {
|
||||
"loginRedirectUri": "/oauth/openid/callback"
|
||||
},
|
||||
"sendmail": {
|
||||
"supportsDisplayName": true
|
||||
}
|
||||
},
|
||||
"checklist": {
|
||||
"register-admin": {
|
||||
"message": "On the first visit, register yourself as an admin user"
|
||||
},
|
||||
"disable-registration": {
|
||||
"message": "Disable registration, if required, to prevent misuse"
|
||||
},
|
||||
"set-api-keys": {
|
||||
"message": "Set API keys in /app/data/env file and restart the app"
|
||||
}
|
||||
},
|
||||
"optionalSso": true,
|
||||
"manifestVersion": 2,
|
||||
"memoryLimit": 1073741824,
|
||||
"minBoxVersion": "8.1.0",
|
||||
"tags": [
|
||||
"ai",
|
||||
"chat",
|
||||
"gpt"
|
||||
],
|
||||
"mediaLinks": [
|
||||
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-00.png",
|
||||
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png"
|
||||
],
|
||||
"icon": "file://logo.png",
|
||||
"dockerImage": "cloudron/ai.librechat.cloudronapp:202610150224320000"
|
||||
}
|
||||
@@ -1,9 +1,34 @@
|
||||
# Inference Co-op LibreChat — brand overlay on the official Cloudron package
|
||||
#
|
||||
# Build: cloudron builder build --repository registry.inference.coop/co-op/librechat-custom --tag <yyyymmdd>-<gitsha>
|
||||
# Deploy: cloudron update --app <app-id> --image registry.inference.coop/co-op/librechat-custom:<tag>
|
||||
# (run from THIS directory — the CLI reads CloudronManifest.json here)
|
||||
#
|
||||
# Rules that keep this image safe:
|
||||
# 1. The base tag is PINNED to the exact appstore image the app runs
|
||||
# (manifest.dockerImage). Never a floating tag: a rebuild must never
|
||||
# silently pull a newer LibreChat than the one we validated.
|
||||
# 2. NEVER edit CloudronManifest.json — the copy in this repo must stay
|
||||
# byte-identical to the OFFICIAL appstore manifest. `cloudron update`
|
||||
# reads it from the deploy directory and applies it to the app; a
|
||||
# hand-edited manifest that omits addons (postgresql, mongodb, oidc,
|
||||
# sendmail, localstorage) strips them from the app and crash-loops it
|
||||
# (mkdir: Read-only file system). That is what broke the sandbox on
|
||||
# 2026-10-18 — the manifest, not the overlay, was the bug.
|
||||
# 3. This image changes ONLY static brand assets. All behavior lives on the
|
||||
# persistent volume (/app/data/librechat.yaml, /app/data/env,
|
||||
# /app/data/mcp/) and survives image updates unchanged.
|
||||
FROM cloudron/ai.librechat.cloudronapp:202610150224320000
|
||||
|
||||
# Overwrite LibreChat config with our custom version (includes icons, models, themes, API keys settings)
|
||||
COPY librechat.yaml /app/code/librechat/librechat.yaml
|
||||
# Login-page + header logo (the client bundle references assets/logo.svg)
|
||||
COPY assets/logo.svg /app/code/librechat/client/dist/assets/logo.svg
|
||||
# Browser favicons + PWA icons (referenced by dist/index.html + manifest.webmanifest)
|
||||
COPY assets/favicon-32x32.png /app/code/librechat/client/dist/assets/favicon-32x32.png
|
||||
COPY assets/favicon-16x16.png /app/code/librechat/client/dist/assets/favicon-16x16.png
|
||||
COPY assets/apple-touch-icon-180x180.png /app/code/librechat/client/dist/assets/apple-touch-icon-180x180.png
|
||||
COPY assets/icon-192x192.png /app/code/librechat/client/dist/assets/icon-192x192.png
|
||||
COPY assets/maskable-icon.png /app/code/librechat/client/dist/assets/maskable-icon.png
|
||||
|
||||
COPY CloudronManifest.json /app/CloudronManifest.json
|
||||
RUN mkdir -p /app/data/public/assets
|
||||
COPY logo.svg /app/code/librechat/client/dist/assets/logo.svg
|
||||
COPY logo.png /app/code/librechat/client/dist/assets/logo-coop.png
|
||||
# Browser-tab title (index.html is baked at build; sed no-ops harmlessly if
|
||||
# the upstream markup ever changes)
|
||||
RUN sed -i 's|<title>LibreChat</title>|<title>Inference Co-op</title>|' /app/code/librechat/client/dist/index.html
|
||||
@@ -1,34 +1,133 @@
|
||||
# LibreChat sandbox maintenance
|
||||
# LibreChat sandbox — Inference Co-op customization
|
||||
|
||||
**Current image**
|
||||
- Docker image: `cloudron/ai.librechat.cloudronapp:202610150224320000`
|
||||
- Deployed as app **0752e430‑aa36‑436e‑8668‑ef18da474f47** (LibreChat sandbox at `https://librechat-test.inference.coop`).
|
||||
Source of truth for the LibreChat evaluation instance at
|
||||
**librechat-test.inference.coop** (Cloudron app `4023ccbf-d57a-4500-97df-14de9cf3516e`,
|
||||
appstore package `ai.librechat.cloudronapp@1.4.1`, which bundles **LibreChat
|
||||
v0.8.8** on image `cloudron/ai.librechat.cloudronapp:202610150224320000`).
|
||||
|
||||
**Automatic updates**
|
||||
- The "Automatic updates" toggle in the Cloudron UI has been turned **off** (as of 2026‑10‑18). This prevents the sandbox from pulling newer Docker images automatically.
|
||||
This repo exists so the sandbox never drifts from what is deployed: the config
|
||||
file here is byte-identical to `/app/data/librechat.yaml`, the MCP server here
|
||||
is byte-identical to `/app/data/mcp/server.py`, and the Docker image is built
|
||||
from this directory.
|
||||
|
||||
**Image‑generation button**
|
||||
- Added the `regolo/qwen-image` model to `modelSpecs.list` in `librechat.yaml`. This makes LibreChat display a permanent **📷 Image generation** button for users, allowing easy prompt‑based image creation via the gateway.
|
||||
## Architecture: what lives where
|
||||
|
||||
**Version‑pinning workflow**
|
||||
1. **Create a version tag** when a new LibreChat release is approved (e.g. `cloudron/ai.librechat.cloudronapp:202610250100000000`).
|
||||
2. **Push the tagged image** to the co‑op registry (e.g. `registry.inference.coop/librechat:sandbox‑2026‑10‑25`).
|
||||
```bash
|
||||
docker pull cloudron/ai.librechat.cloudronapp:<new‑tag>
|
||||
docker tag cloudron/ai.librechat.cloudronapp:<new‑tag> registry.inference.coop/librechat:sandbox‑<date>
|
||||
docker login registry.inference.coop # use registry‑bot credentials
|
||||
docker push registry.inference.coop/librechat:sandbox‑<date>
|
||||
```
|
||||
3. **Redeploy** the sandbox with the pinned tag:
|
||||
```bash
|
||||
cloudron update --app 0752e430-aa36-436e-8668-ef18da474f47 \
|
||||
--image registry.inference.coop/librechat:sandbox‑<date>
|
||||
```
|
||||
4. **Verify** the app is running (`cloudron status --app <id>`) and that the image field reflects the new tag.
|
||||
5. **Record** the change in this document (date, tag, reason) and optionally open a GitHub/Gitea issue linking to the upstream LibreChat release.
|
||||
| Layer | Location | Survives image update? | Repo mirror |
|
||||
|---|---|---|---|
|
||||
| App config | `/app/data/librechat.yaml` (volume) | yes | `librechat.yaml` |
|
||||
| Env vars (env-file wins!) | `/app/data/env` (volume, sourced LAST by start.sh) | yes | changed lines documented below |
|
||||
| Env vars (Cloudron-managed) | `cloudron env` (process env) | yes | documented below |
|
||||
| MCP docs server | `/app/data/mcp/server.py` (volume) | yes | `mcp/server.py` |
|
||||
| Brand assets (logo, favicons) | baked into image overlay | no — rebuilt per image | `assets/` |
|
||||
| CloudronManifest.json | repo only (used by `cloudron update`) | n/a | byte-identical copy of the OFFICIAL appstore manifest |
|
||||
|
||||
**Rollback**
|
||||
- To roll back, repeat step 3 with the previous image tag.
|
||||
**Precedence gotcha:** `start.sh` does `source /run/librechat/env` AFTER the
|
||||
process env, and `/app/data/env` is appended into it — so a value defined in
|
||||
`/app/data/env` **overrides** the same `cloudron env` variable. That is why
|
||||
`ALLOW_EMAIL_LOGIN=false` must be set in `/app/data/env`, not (only) via
|
||||
`cloudron env`.
|
||||
|
||||
**Future maintainers**
|
||||
- All steps are captured in this doc and in the corresponding issue in `co‑op/support` (Issue #24). The `co‑op/docs` repository should contain this file; keep it up‑to‑date whenever the sandbox image changes or the automatic‑update flag is toggled.
|
||||
## Deploy a config change (no image rebuild needed)
|
||||
|
||||
```bash
|
||||
B64=$(base64 -w0 librechat.yaml)
|
||||
cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" exec \
|
||||
--app 4023ccbf-d57a-4500-97df-14de9cf3516e \
|
||||
-- bash -c "echo '$B64' | base64 -d > /app/data/librechat.yaml"
|
||||
cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" restart \
|
||||
--app 4023ccbf-d57a-4500-97df-14de9cf3516e
|
||||
```
|
||||
|
||||
Always `diff` the repo file against the live one after deploying. Always
|
||||
deploy via base64 — heredocs and `sed` inserts have corrupted this file twice
|
||||
(literal `$(...)` / bad indentation → LibreChat silently falls back to
|
||||
defaults with only one log line).
|
||||
|
||||
Verify after every change:
|
||||
|
||||
```bash
|
||||
cloudron logs --app <id> --lines 60 | grep -iE 'custom config|error|invalid|MCP'
|
||||
curl -s https://librechat-test.inference.coop/api/config # appTitle, emailLoginEnabled, socialLogins
|
||||
```
|
||||
|
||||
## Build + deploy the image (brand assets only)
|
||||
|
||||
```bash
|
||||
cd /tmp/librechat-custom # THIS dir: cloudron update reads CloudronManifest.json here
|
||||
git add -A && git commit -m "..." && git push
|
||||
SHA=$(git rev-parse --short HEAD)
|
||||
cloudron builder build --repository registry.inference.coop/co-op/librechat-custom \
|
||||
--tag 20261019-$SHA
|
||||
cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" update \
|
||||
--app 4023ccbf-d57a-4500-97df-14de9cf3516e \
|
||||
--image registry.inference.coop/co-op/librechat-custom:20261019-$SHA
|
||||
```
|
||||
|
||||
Rollback: rerun the `update` with the previous tag (or the appstore image
|
||||
`cloudron/ai.librechat.cloudronapp:<original-tag>`).
|
||||
|
||||
**NEVER edit `CloudronManifest.json`.** `cloudron update` reads it from this
|
||||
directory and applies it to the app. A hand-edited manifest that omits the
|
||||
addons (`postgresql`, `mongodb`, `oidc`, `sendmail`, `localstorage`) strips
|
||||
them from the running app and crash-loops it (`mkdir: Read-only file system`).
|
||||
That is what broke the sandbox on 2026-10-18 — the manifest, not the overlay.
|
||||
When the appstore package updates, refresh this file with a new copy pulled
|
||||
from the Cloudron API (`GET /api/v1/apps/<id> → .manifest`) and bump the
|
||||
`FROM` tag in the Dockerfile to the new `manifest.dockerImage`.
|
||||
|
||||
## Env vars (live state)
|
||||
|
||||
Set in `/app/data/env` (volume — these WIN over cloudron env):
|
||||
|
||||
- `APP_TITLE="Inference Co-op"` (was `"LibreChat"`)
|
||||
- `ALLOW_EMAIL_LOGIN=false` (was `true`) — password login removed; Cloudron
|
||||
SSO (OIDC) is the only login path
|
||||
- `SCHEDULES_SINGLE_PROCESS=true` — sandbox runs a single replica; silences
|
||||
the scheduler's Redis guard error
|
||||
|
||||
Set via `cloudron env set` (process env):
|
||||
|
||||
- `TTS_API_KEY` / `STT_API_KEY` — **dedicated LiteLLM virtual key** (alias
|
||||
`librechat-speech`, $5 / 30d budget, restricted to `tinfoil/voxtral-tts` +
|
||||
`tinfoil/whisper-large-v3-turbo`). Regenerate with the gateway master key:
|
||||
`POST /key/generate {"key_alias":"librechat-speech","models":[...],"max_budget":5,"budget_duration":"30d"}`
|
||||
— never put the master key here.
|
||||
- `IMAGE_GEN_OAI_BASEURL=https://gateway.inference.coop/v1` and
|
||||
`IMAGE_GEN_OAI_MODEL=regolo/qwen-image` — the agent "OpenAI Image Tools"
|
||||
points at the co-op gateway. No `IMAGE_GEN_OAI_API_KEY`: members enter their
|
||||
own co-op key in the tool UI (per-member billing, same pattern as the chat
|
||||
endpoint's `apiKey: user_provided`).
|
||||
- `SEARXNG_INSTANCE_URL=https://search.inference.coop` — referenced from the
|
||||
YAML as `${SEARXNG_INSTANCE_URL}` (self-hosted search; keyless JSON API).
|
||||
|
||||
## Feature notes (LibreChat v0.8.8)
|
||||
|
||||
- **Chat models**: custom endpoint "Inference Co-op" → gateway, per-member
|
||||
keys, 8 chat modelSpecs (emoji convention shared with models.md).
|
||||
`regolo/qwen-image` is deliberately NOT in the chat picker (image models
|
||||
are not chat models; chat-calling it was the source of the old 500s).
|
||||
- **Image generation**: LibreChat exposes image gen through an **Agent with
|
||||
the "OpenAI Image Tools" tool**, not a chat-picker button. Members create
|
||||
an agent, add the tool, and paste their co-op key on first use.
|
||||
- **MCP**: `inference-docs` (stdio, `/app/data/mcp/server.py`, tool
|
||||
`search_docs`) is admin-configured; members may add their own via the MCP
|
||||
Settings panel (the "bring your own tools" pattern). Permissions seeded via
|
||||
`interface.mcpServers` (use/create true, share false).
|
||||
- **Speech**: TTS `tinfoil/voxtral-tts` (voice `casual_female`), STT
|
||||
`tinfoil/whisper-large-v3-turbo`, both via the gateway with the capped key.
|
||||
- **Web search**: SearXNG (self-hosted) + keyless Keenable scraper, no reranker.
|
||||
- **Colors**: `interface.theme` in the YAML is **forward-compatible only** —
|
||||
the theme engine ships in LibreChat releases AFTER 0.8.8 (merged to dev,
|
||||
not tagged). The block is silently ignored today and activates by itself
|
||||
when the appstore package bundles a newer LibreChat. No other runtime
|
||||
theming exists in 0.8.8.
|
||||
|
||||
## Known state / limitations
|
||||
|
||||
- `patches/`, `logo.png`, `logo-coop.png`, `logo.svg` (repo root) are legacy
|
||||
leftovers from the abandoned 2026-10-18 hand-built-image attempt — unused,
|
||||
pending cleanup.
|
||||
- The `[schedules]` Redis guard error is resolved by
|
||||
`SCHEDULES_SINGLE_PROCESS=true` (above).
|
||||
- The `RAG API not reachable` warning is expected (no rag_api addon); it only
|
||||
affects LibreChat's own file-RAG, which we do not use.
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<image href="data:image/png;base64,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 truncated
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
@@ -1,28 +1,12 @@
|
||||
version: 1.3.1
|
||||
version: 1.3.17
|
||||
|
||||
# Voice: server-side STT/TTS via the co-op gateway (Tinfoil TEE).
|
||||
# Server STT works in every browser (Firefox has no Web Speech API).
|
||||
speech:
|
||||
stt:
|
||||
openai:
|
||||
url: "https://gateway.inference.coop/v1/audio/transcriptions"
|
||||
apiKey: "${GATEWAY_KEY}"
|
||||
model: "tinfoil/whisper-large-v3-turbo"
|
||||
tts:
|
||||
openai:
|
||||
url: "https://gateway.inference.coop/v1/audio/speech"
|
||||
apiKey: "${GATEWAY_KEY}"
|
||||
model: "tinfoil/voxtral-tts"
|
||||
voices: ["neutral_female", "neutral_male", "casual_female", "casual_male", "cheerful_female"]
|
||||
cache: true
|
||||
|
||||
# Inference Co-op gateway — PER-USER keys (production pattern): no server-side
|
||||
# apiKey here, so each user pastes their own dashboard key once. Usage then
|
||||
# bills to that member's own LiteLLM team/budget, exactly like the API path.
|
||||
# Inference Co-op gateway — PER-USER keys: each member pastes their own
|
||||
# dashboard key once (apiKey: user_provided). Usage bills to that member's
|
||||
# own LiteLLM team/budget.
|
||||
endpoints:
|
||||
custom:
|
||||
- name: "Inference Co-op"
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
apiKey: "user_provided"
|
||||
baseURL: "https://gateway.inference.coop/v1"
|
||||
models:
|
||||
@@ -40,95 +24,72 @@ endpoints:
|
||||
titleModel: "greenpt/glm-5.3-flash"
|
||||
titleMethod: "completion"
|
||||
|
||||
# Web search via the co-op's self-hosted SearXNG (public URL, JSON enabled for OWUI already).
|
||||
# scraperProvider keenable = keyless page-fetch, so members get one-click search
|
||||
# with no Firecrawl prompt. (Production note: keenable is an external keyless
|
||||
# service — if that offends self-host values, swap in a self-hosted Firecrawl.)
|
||||
webSearch:
|
||||
searchProvider: "searxng"
|
||||
scraperProvider: "keenable"
|
||||
searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}"
|
||||
searxngSearchOptions:
|
||||
engines: "google,bing,duckduckgo"
|
||||
language: "en"
|
||||
timeout: 15000
|
||||
|
||||
# MCP: the co-op docs, opt-in per conversation (stdlib stdio server in /app/data).
|
||||
mcpServers:
|
||||
inference-docs:
|
||||
type: stdio
|
||||
command: python3
|
||||
args:
|
||||
- /app/data/inference-docs-mcp/server.py
|
||||
|
||||
# Emoji-ified model picker (same feature-tier convention as models.md / OWUI):
|
||||
# 🌱 = renewable-powered (GreenPT + Regolo), 🔒 = TEE-architected private (Tinfoil).
|
||||
# Utility models (audio STT/TTS, image generation) are excluded from chat.
|
||||
# Emoji-ified model picker (same convention as models.md / OWUI):
|
||||
# 🌱 = renewable (GreenPT + Regolo), 🔒 = TEE-private (Tinfoil).
|
||||
modelSpecs:
|
||||
enforce: true
|
||||
prioritize: true
|
||||
list:
|
||||
- name: tinfoil-deepseek-v4-1-flash
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🔒 tinfoil/deepseek-v4-1-flash"
|
||||
softDefault: true
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "tinfoil/deepseek-v4-1-flash"
|
||||
- name: tinfoil-gpt-oss-120b
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🔒 tinfoil/gpt-oss-120b"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "tinfoil/gpt-oss-120b"
|
||||
- name: tinfoil-glm-5-3
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAaK0lEQVR4nO3dPXJTWbQG0EsX1dVVPSmG4CkQkJE4cULihISEhIyAKXgITIoqioQX9LvvycKSrnTPzz5nrxV2G2lLZev7zr6y/Gqhml8/f/zuPQPAyP7+599XvWeYlSd2JyEP0IdysI8n7wrCHiA2pWA7T9QZAh9gbArBaZ6YAwIfYG4Kwf9L/0QIfYCcspeBtA9e8AOwLHmLQKoHLfQBOCdTGUjxQAU/ANfIUASmfoCCH4A9Zi4CUz4wwQ9ASTMWgakekOAHoKaZisAUD0TwA9DSDEVg6Acg+AHoaeQi8FfvAW4l/AHobeQsGq65jPxkAzCv0bYBQ20AhD8AUY2WUUO0ldGeVAByG2EbEH4DIPwBGM0I2RW6AIzwBALAS6JnWMgVRfQnDQCuEfGSQLgNgPAHYDYRsy1UAYj4BAFACdEyLkwBiPbEAEBpkbKu+zWJSE8GALTS+30BXTcAwh+ArHpnYLcC0PuBA0BvPbOwSwEQ/gDwn16Z2LwACH8AeK5HNjYtAMIfAF7WOiObFQDhDwDntczKJgVA+APANq0ys3oBEP4AcJ0W2RnmkwABgHaqFgCnfwC4Te0MrfYxhMIf4nn75d3Z///t/ddGkwBb1frI4Co3Kvwhjkuhf4oyAHHUKAHFb1D4Q3+3hv4pygD0V7oEeBMgTKZ0+Ne6TaCvogXA6R/6qhnUSgD0VTpji60ThD/00zqcXRKAfkpdCiiyARD+0E+Pk7ltAPRTKnO9BwAAEtpdAJz+oZ+eJ3FbAOinRPbuKgDCH/qJEMARZoCs9mawSwAwoEjBG2kWYLubC4DTPwD0tSeLbyoAwh8AYrg1k10CgMFEXLlHnAk47+oC4PQPALHcks02AACQ0FUFwOkf+oq8ao88G2RwbUbbAABAQpsLgNM/AMR2TVbbAABAQpsKgNM/AIxha2bbAABAQhcLgNM/AIxlS3bbAABAQmcLgNM/xPLt/dfeI5wUeTbI6FKG2wAAQEIKAAAkdLIAWP9DTBFX7RFnAs5nuQ0AACT0YgFw+geAOZzKdBsAGFCklXukWYDtFAAYVITgjTADcJs/CoD1P4yjZwALfxjHS9luAwAACSkAMLgeJ3Gnfxjfq+P/4BIAjOvtl3dVb1/ww7j+/uffZ5n/bAMg/GFsNQNa+MPYjjPeJQCYTI2gFv4wn2frABsAmM+tlwWEPszn8DKAAgCJXCoDQh/m9mIBEP4AML+1BHgPAAAkpAAAQEIKAAAkpAAAQEJ/LYs3AAJAFmvm2wAAQEIKAAAkpAAAQEIKAAAkpAAAQEIKAAAk9MqvAAJAPjYAAJCQAgAACSkAAJCQAgAACSkAAJCQAgAACb3uPQBk9vj94+WvefOhwSRANj4HABraEvgXb0MhAApQAKCBEsH/x20qAsAOCgBUVCP4/7gPRQC4gQIAFbQI/j/uUxEAruC3AKCwHuHf836BMSkAUFDvEO59/8A4FAAoJEr4RpkDiM17AKCAiKE7wnsC7p8eTv6/z3efGk4C+SgAsFPE8F9FLAHnQv8UZQDKUwBgh8jhv4pSAm4J/mOKAJTjo4CBqkoE//FtKQKwnzcBwo1GOP0vS985S4Z/i9uFTBQAoIraIa0EwD4KANxglNP/qvW8rcJZCYDbKQAAkJACAFca7fS/ajV361O5LQDcRgEAiukVxkoAXE8BAICEFAC4wqjr/9Xo8wPlKABAEb3X8L3vH0ajAABAQgoAACSkAABAQgoAACSkAABAQgoAACSkAABAQgoAUMTnu0+p7x9GowDAFR7ffOg9wi6jzw+UowAAQEIKAFBMrzW89T9cTwGAK426Rm81d+swFv5wGwUAABJSAOAGo20BWs/b6lTu9A+3UwCAKmqHs/CHfRQAuNEoW4Cec9YKaeEP+73uPQAwtzWs758eit0WsN+rXz9//O49BIzs8fvH3iOcFHFLcUsREPxQngIABUQsARHD/9i5MiD0oS4FAAqJVAJGCH+gL28ChEKihG6UOYDYFAAoqHf49r5/YBwKABTWK4SFP3AN7wGAilq8L0DwA7dQAKCBGkVA8AN7KADQUIkiIPiBEhQA6GhLIRD4QA0KAAAk5LcAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAEnrdewCI6O2Xd5u+7tv7r5UnAajDXwOEZXvgX6IQAKNQAEitVPAfUwSA6BQAUqoV/McUASAqbwIknVbh3/q+AK5hA0AavcPYNgCIRAEghd7hv+pdAh6/fzz//998aDQJ0JsCwPSihP+qdQm4FPon/50yAFNTAJhatPBf1S4Bt4b+ydtTBmA63gTItKKG/7LUna10+Ne6TaAvGwCmFDn8D5XeBNQO6pE3AfdPD2f//+e7T40mgRh8FDBMoNUJfb2fUYrApdA/9bXKABm4BMB0Rjn9L0uZWXus50e4JHBN+Jf8tzAKGwCmMlL4r95+edf91wNnUiq819uxDWBWNgAwsJ4n8YhbgBond9sAZqUAMI0RT/+rW2aPEMARZljVDGolgBkpADCgSMEbYZYWAa0EMBsFgCmMfPpfzfAYgHEoAMDQWp7MbQGYiQIAg4mwcj/Wa6YegawEMAsFAAASUgAY3kzXzmd6LEBsCgAMJOL6f9V6tp6reJcBmIECAAAJKQAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJKQAwkMc3H3qPcFLr2T7ffWp6f1HuG0pRABjet/dfe49QzEyPBYhNAQCAhBQAGEzEywC9Zuqxirf+ZxYKADC0loEs/JmJAsAUZrh2PsNjAMahAMCAIl0GiDBLi5O50z+zUQCYxsgn6FtmjxC8EWZY1Qxo4c+MFAAYWM8AjhT+qxpBLfyZ1eveA0BJ395/Xd5+edd7jKuMvLmIaA3s+6eHIrcDs7IBYDojBWqJWXucxCOe/o/tCXDhTwY2ADCBNZAfv39scj+jOAzySxsBoU82r379/PG79xBQQ/RLAbU2FbVKwGjhD5znEgDTinwpoOZsNYJa+MN8bACYXrRNQOticutGQOjD3BQAUohSAnpvJS6VAaEPeSgApNG7BPQOf4BDCgDptC4Cgh+IyJsASadlIAt/ICobAFKrtQ0Q/EB0CgAs5YqA4AdGoQDAC7YWAoEPjEoBAICEvAkQABJSAAAgIQUAABJSAAAgIQUAABJSAAAgIQUAABJSAAAgode9B4Bz7p8eNn3d57tPlScBmItPAiSUrYF/iUIAcJ4CQAilgv+YIgDwMgWArmoF/zFFAOA5BYAuWgX/MUUA4D9+C4DmeoV/7/sGiMQGgGaihe9o24C3X95t+rpv779WngSYgQJAE9HCfxW9BGwN/VOUAeAUBYDqoob/KmIJ2Bv8xxQB4JgCQFXRw38VpQSUDv5jigCwUgCoZpTwX/UuAbXDfzVKCXj8/vHy17z50GASmJOPAoYAWoX/el9RS8CW0D/19coAXMcGgCpGO/2vemwBWob/oUgl4NrgP3tbigBs4nMAKG7U8F+W9rP3Cv/e932oZPjXuD2YlUsA0EmEAO55OaBmUK+3HXEbcK5k9n4fCrm4BEBRI5/+D9V+IY4Q/odal4CWp/QIJeCWnwtlgNpcAoDGooX/srSdqfWKvuclgfunh5tL8Z5/C1soABQz04vVTI+FPkp9D/lepBYFABqKePpftZit12m89f2WDm0lgBoUAIqY8QVqxsfUU+9357e6/1rfN74fKU0BgEYin/5XI8wYWe2QVgIoSQEAqut9+l9FmQMiUAAACmh1OrcFoBQFgN1mfkEq9dhGWq2PNCtwOwUAqCra2r3GPK1L8Mylm3YUAABISAEAgIQUAABISAEAgIQUAABISAEAgIQUAABISAEAqnp886H3CM/UmOfz3afitxnp/piTAsBuM78YlXps395/LXI7LYw0K3A7BQCggFZFeObCTVsKAFBdlMsAUeaACBQAaGSE1foIM0ZW+3Tu9E9JCgBFzPjCNONj6qn36bvV/df6vvH9SGkKADQU+YTdYrZeJaD1/ZYOa+FPDQoAxcz0IjXTY6GPUt9DvhepRQGAxiJuAVrO1Po03vPSw+e7TzcH+J5/C1u8+vXzx+/eQzCX+6eH3iPs0upF9+2Xd03u55JeheTx+8f69xHwXf/nfj4EPi0pABSnAGzXuwRE2EbUKAIRgx+icQmA4kY+xbSevWcARwj/ZSkf1sIftrEBoJrRNgE9i0vrTUCU8D+2Zxsg+OE6r3sPAPwXyK1KQNTwX5bnIb6lDAh9uJ0NAFWNsgWIctmidgmIHP5AWwoA1UUvAVHC/1DpIiD4gWMKAE1ELQERw//Q3iIg+IFTFACaiVYCoof/sa1lQOgDWygANNe7CIwW/AA1+BwAmusZwMIf4D82AHTVahsg+AGeUwAIoVYREPwAL1MACKVUERD8AOcpAIS2tRAIfIDrKAAAkJDfAgCAhBQAAEhIAQCAhBQAAEjode8BGIfPogeYh98C4KRSf5JWIQCIRwHgmdJ/h/6YMgAQgwLAsiz1g/+YIgDQlwKQXOvgP6YIAPThtwAS6x3+UWYAyMgGIKlowTvqJuDx+8dtX/fmQ+VJAK6jACQTLfiPjVAEtob+yX+vDAABKACJRA//VcQSsDf0T96uMgB04j0ASYwS/ssSb9Za4V/7tgHOsQFIIFqgbtV7E9A6nEfcBtw/PZz9/5/vPjWaBLiWjwKGF/Q4mT9+/zhECbgU+qe+VhmAWGwAJjfq6X/VYwvQey0fsQRcE/pbKAPQn/cATGz08F+W9o+hd/hHmeFQ6fCvdZvAdWwAJjVD+B9qsQmIFrwRNgG1gzryJuDSz1Dv96jAXgrApBSA60QL/1WvEtD6hB6lCNz6c6MMMCIFYEKzhf+q1ots1PBftS4BvdbzvUvA3p+bEUrApe/1CLine truncated
|
||||
label: "🔒 tinfoil/glm-5.3"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "tinfoil/glm-5.3"
|
||||
- name: greenpt-deepseek-v4-1-flash
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🌱 greenpt/deepseek-v4.1-flash"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "greenpt/deepseek-v4.1-flash"
|
||||
- name: greenpt-glm-5-3-flash
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🌱 greenpt/glm-5.3-flash"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "greenpt/glm-5.3-flash"
|
||||
- name: greenpt-glm-5-3
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🌱 greenpt/glm-5.3"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "greenpt/glm-5.3"
|
||||
- name: regolo-apertus-70b
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🌱 regolo/apertus-70b"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "regolo/apertus-70b"
|
||||
- name: regolo-qwen3-5-122b
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
iconURL: "data:image/png;base64,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 truncated
|
||||
label: "🌱 regolo/qwen3.5-122b"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "regolo/qwen3.5-122b"
|
||||
- name: regolo-qwen-image
|
||||
iconURL: "/assets/logo-coop.png"
|
||||
label: "🖼️ regolo/qwen-image"
|
||||
preset:
|
||||
endpoint: "Inference Co-op"
|
||||
model: "regolo/qwen-image"
|
||||
|
||||
|
||||
|
||||
# Inference Cooperative branding
|
||||
|
||||
interface:
|
||||
customWelcome: "Welcome to your co-op AI."
|
||||
# Feature permissions (seeded for the USER role at startup;
|
||||
# ongoing edits belong in the LibreChat Admin Panel)
|
||||
webSearch: true
|
||||
mcpServers:
|
||||
use: true # members can use admin-configured MCP servers
|
||||
create: true # members can add their own (bring-your-own-tools)
|
||||
share: false
|
||||
theme:
|
||||
version: 1
|
||||
name: inference
|
||||
@@ -163,3 +124,47 @@ interface:
|
||||
rgb-text-primary: '236 233 226'
|
||||
rgb-text-secondary: '168 173 158'
|
||||
rgb-border-light: '74 82 64'
|
||||
|
||||
|
||||
# Speech (STT/TTS) via the co-op gateway. Uses a dedicated LiteLLM virtual key
|
||||
# (alias: librechat-speech, $5/30d budget, restricted to the audio models) so
|
||||
# speech never runs on the gateway master key. The gateway is a public
|
||||
# endpoint, so no SSRF allowedAddresses exemption is needed.
|
||||
speech:
|
||||
tts:
|
||||
openai:
|
||||
url: "https://gateway.inference.coop/v1"
|
||||
apiKey: "${TTS_API_KEY}"
|
||||
model: "tinfoil/voxtral-tts"
|
||||
voices: ["casual_female"]
|
||||
stt:
|
||||
openai:
|
||||
url: "https://gateway.inference.coop/v1"
|
||||
apiKey: "${STT_API_KEY}"
|
||||
model: "tinfoil/whisper-large-v3-turbo"
|
||||
speechTab:
|
||||
conversationMode: false
|
||||
advancedMode: false
|
||||
speechToText: true
|
||||
textToSpeech: true
|
||||
|
||||
# Web search: self-hosted SearXNG (search.inference.coop, keyless JSON API)
|
||||
# for search, keyless Keenable for page scraping, no reranker. The instance
|
||||
# URL is an env-var reference (real values never live in the YAML).
|
||||
webSearch:
|
||||
searchProvider: "searxng"
|
||||
searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}"
|
||||
searxngSearchOptions:
|
||||
engines: "google,bing,startpage"
|
||||
language: "en"
|
||||
scraperProvider: "keenable"
|
||||
rerankerType: "none"
|
||||
|
||||
# MCP servers (admin-configured). The docs server is the same stdlib-only
|
||||
# Python server Open WebUI uses; it lives on the persistent volume at
|
||||
# /app/data/mcp/server.py so it survives image updates.
|
||||
mcpServers:
|
||||
inference-docs:
|
||||
command: /app/code/venv/bin/python3
|
||||
args: ["/app/data/mcp/server.py"]
|
||||
timeout: 60000
|
||||
@@ -0,0 +1,256 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Inference Cooperative docs MCP server (stdio, stdlib-only).
|
||||
|
||||
Exposes a `search_docs` tool over the co-op documentation (co-op/docs on
|
||||
git.inference.coop). Members opt in per conversation via the tools palette.
|
||||
|
||||
Design notes:
|
||||
- stdio transport: newline-delimited JSON-RPC 2.0 on stdin/stdout (the MCP
|
||||
stdio protocol). All logging goes to stderr — stdout is protocol-only.
|
||||
- No third-party dependencies: the corpus is fetched from the public Gitea
|
||||
raw API, chunked by heading, and ranked with a compact BM25.
|
||||
- The index refreshes lazily if older than DOCS_TTL seconds (default 30 min).
|
||||
"""
|
||||
|
||||
import json
|
||||
import math
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import urllib.request
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
DOCS_REPO = "co-op/docs"
|
||||
GITEA_API = "https://git.inference.coop/api/v1"
|
||||
DOCS_TTL = 30 * 60
|
||||
MAX_CHUNKS_RETURNED = 5
|
||||
|
||||
SERVER_NAME = "inference-cooperative-docs"
|
||||
SERVER_VERSION = "1.0.0"
|
||||
|
||||
_index = {"chunks": [], "built_at": 0.0}
|
||||
_lock_held = False
|
||||
|
||||
TOKEN_RE = re.compile(r"[a-z0-9]+")
|
||||
|
||||
|
||||
def log(msg):
|
||||
sys.stderr.write(f"[inference-docs-mcp] {msg}\n")
|
||||
sys.stderr.flush()
|
||||
|
||||
|
||||
def fetch_json(url):
|
||||
with urllib.request.urlopen(url, timeout=30) as r:
|
||||
return json.loads(r.read().decode("utf-8"))
|
||||
|
||||
|
||||
def fetch_text(url):
|
||||
with urllib.request.urlopen(url, timeout=30) as r:
|
||||
return r.read().decode("utf-8")
|
||||
|
||||
|
||||
def list_doc_files():
|
||||
files = fetch_json(f"{GITEA_API}/repos/{DOCS_REPO}/contents")
|
||||
return [
|
||||
{"path": f["path"], "name": f["name"]}
|
||||
for f in files
|
||||
if f["type"] == "file" and f["name"].endswith(".md")
|
||||
]
|
||||
|
||||
|
||||
def chunk_markdown(path, text):
|
||||
"""Split a doc into section chunks keyed by its top title + heading."""
|
||||
lines = text.splitlines()
|
||||
title = lines[0].lstrip("# ").strip() if lines and lines[0].startswith("#") else path
|
||||
sections = []
|
||||
current_head = "Overview"
|
||||
current = []
|
||||
|
||||
def flush():
|
||||
body = "\n".join(current).strip()
|
||||
if len(body) < 40:
|
||||
return
|
||||
sections.append({"doc": title, "path": path, "section": current_head, "text": body})
|
||||
|
||||
for line in lines:
|
||||
if line.startswith("## "):
|
||||
flush()
|
||||
current_head = line.lstrip("# ").strip()
|
||||
current = []
|
||||
else:
|
||||
current.append(line)
|
||||
flush()
|
||||
return sections
|
||||
|
||||
|
||||
def tokenize(text):
|
||||
return TOKEN_RE.findall(text.lower())
|
||||
|
||||
|
||||
def build_index():
|
||||
chunks = []
|
||||
docs = list_doc_files()
|
||||
|
||||
def load(doc):
|
||||
try:
|
||||
raw = fetch_text(f"{GITEA_API}/repos/{DOCS_REPO}/raw/{doc['path']}")
|
||||
return chunk_markdown(doc["path"], raw)
|
||||
except Exception as exc: # noqa: BLE001 - one bad doc shouldn't kill the index
|
||||
log(f"skipping {doc['path']}: {exc}")
|
||||
return []
|
||||
|
||||
with ThreadPoolExecutor(max_workers=6) as pool:
|
||||
for parts in pool.map(load, docs):
|
||||
chunks.extend(parts)
|
||||
|
||||
# BM25 statistics
|
||||
doc_terms = [tokenize(c["text"]) for c in chunks]
|
||||
n = len(chunks)
|
||||
avg_len = sum(len(t) for t in doc_terms) / max(n, 1)
|
||||
df = {}
|
||||
for terms in doc_terms:
|
||||
for term in set(terms):
|
||||
df[term] = df.get(term, 0) + 1
|
||||
for c, terms in zip(chunks, doc_terms):
|
||||
c["_tf"] = {}
|
||||
for t in terms:
|
||||
c["_tf"][t] = c["_tf"].get(t, 0) + 1
|
||||
c["_len"] = len(terms)
|
||||
_index["chunks"] = chunks
|
||||
_index["df"] = df
|
||||
_index["n"] = n
|
||||
_index["avg_len"] = avg_len
|
||||
_index["built_at"] = time.time()
|
||||
log(f"index built: {n} chunks from {len(docs)} docs")
|
||||
|
||||
|
||||
def ensure_index():
|
||||
if not _index["chunks"] or time.time() - _index["built_at"] > DOCS_TTL:
|
||||
build_index()
|
||||
|
||||
|
||||
def search(query, limit=MAX_CHUNKS_RETURNED):
|
||||
ensure_index()
|
||||
k1, b = 1.5, 0.75
|
||||
q_terms = tokenize(query)
|
||||
scored = []
|
||||
for c in _index["chunks"]:
|
||||
score = 0.0
|
||||
for t in q_terms:
|
||||
tf = c["_tf"].get(t, 0)
|
||||
if not tf:
|
||||
continue
|
||||
idf = math.log(1 + (_index["n"] - _index["df"].get(t, 0) + 0.5) / (_index["df"].get(t, 0) + 0.5))
|
||||
score += idf * tf * (k1 + 1) / (tf + k1 * (1 - b + b * c["_len"] / _index["avg_len"]))
|
||||
if score > 0:
|
||||
scored.append((score, c))
|
||||
scored.sort(key=lambda pair: -pair[0])
|
||||
return scored[:limit]
|
||||
|
||||
|
||||
def tool_search_docs(args):
|
||||
query = str(args.get("query") or "").strip()
|
||||
if not query:
|
||||
return {"content": [{"type": "text", "text": "Provide a query."}]}
|
||||
limit = min(int(args.get("limit") or MAX_CHUNKS_RETURNED), 10)
|
||||
results = search(query, limit)
|
||||
if not results:
|
||||
return {"content": [{"type": "text", "text": "No matching documentation found."}]}
|
||||
parts = []
|
||||
for score, c in results:
|
||||
parts.append(f"[{c['doc']} — {c['section']}] (relevance {score:.2f})\n{c['text']}")
|
||||
return {"content": [{"type": "text", "text": "\n\n---\n\n".join(parts)}]}
|
||||
|
||||
|
||||
TOOLS = [
|
||||
{
|
||||
"name": "search_docs",
|
||||
"description": (
|
||||
"Search the Inference Cooperative documentation (getting started, models, "
|
||||
"API access, charter, policies). Returns the most relevant doc sections."
|
||||
),
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"query": {"type": "string", "description": "What to look for in the docs"},
|
||||
"limit": {"type": "integer", "description": "Max sections to return (default 5)"},
|
||||
},
|
||||
"required": ["query"],
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
TOOLS_HANDLERS = {"search_docs": tool_search_docs}
|
||||
|
||||
|
||||
def handle(msg):
|
||||
method = msg.get("method")
|
||||
msg_id = msg.get("id")
|
||||
|
||||
if method == "initialize":
|
||||
return {
|
||||
"jsonrpc": "2.0",
|
||||
"id": msg_id,
|
||||
"result": {
|
||||
"protocolVersion": "2024-11-05",
|
||||
"capabilities": {"tools": {}},
|
||||
"serverInfo": {"name": SERVER_NAME, "version": SERVER_VERSION},
|
||||
},
|
||||
}
|
||||
if method == "ping":
|
||||
return {"jsonrpc": "2.0", "id": msg_id, "result": {}}
|
||||
if method == "tools/list":
|
||||
return {"jsonrpc": "2.0", "id": msg_id, "result": {"tools": TOOLS}}
|
||||
if method == "tools/call":
|
||||
params = msg.get("params") or {}
|
||||
name = params.get("name")
|
||||
handler = TOOLS_HANDLERS.get(name)
|
||||
if not handler:
|
||||
return {
|
||||
"jsonrpc": "2.0",
|
||||
"id": msg_id,
|
||||
"error": {"code": -32602, "message": f"Unknown tool: {name}"},
|
||||
}
|
||||
try:
|
||||
result = handler(params.get("arguments") or {})
|
||||
return {"jsonrpc": "2.0", "id": msg_id, "result": result}
|
||||
except Exception as exc: # noqa: BLE001 - report tool errors in-band
|
||||
log(f"tool error: {exc}")
|
||||
return {
|
||||
"jsonrpc": "2.0",
|
||||
"id": msg_id,
|
||||
"result": {"content": [{"type": "text", "text": f"Search failed: {exc}"}], "isError": True},
|
||||
}
|
||||
if method and method.startswith("notifications/"):
|
||||
return None
|
||||
if msg_id is not None:
|
||||
return {"jsonrpc": "2.0", "id": msg_id, "error": {"code": -32601, "message": "Method not found"}}
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
log("starting (stdio)")
|
||||
for line in sys.stdin:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
try:
|
||||
msg = json.loads(line)
|
||||
except json.JSONDecodeError as exc:
|
||||
log(f"bad json: {exc}")
|
||||
continue
|
||||
try:
|
||||
resp = handle(msg)
|
||||
except Exception as exc: # noqa: BLE001 - never crash the protocol loop
|
||||
log(f"handler crash: {exc}")
|
||||
if msg.get("id") is not None:
|
||||
resp = {"jsonrpc": "2.0", "id": msg["id"], "error": {"code": -32603, "message": "Internal error"}}
|
||||
else:
|
||||
resp = None
|
||||
if resp is not None:
|
||||
sys.stdout.write(json.dumps(resp) + "\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||