infocepo-infra-mcp
This MCP server provides access to infocepo.com infrastructure, enabling interaction with LLM APIs, ChromaDB, Docker registry, S3 storage, and wiki-based service discovery.
AI/LLM Capabilities:
Chat completions with multiple models (
llm_chat).Image understanding/OCR (
llm_vision).Speech-to-text transcription (
stt_transcribe).Text-to-speech synthesis (
tts_speech).Image generation (
image_generate).Text embeddings for RAG (
embeddings_create).Long text summarization (
summary_text).Speaker diarization (
diarize_audio).
Vector Database (ChromaDB):
List collections (
chromadb_collections), perform semantic search (chromadb_search), and upsert documents with auto-embedding (chromadb_upsert).
Storage & Registry:
Manage S3-compatible storage: list, upload, and download objects (
s3_list,s3_upload,s3_download).List Docker images from the private registry (
registry_list).
Infrastructure Discovery & Wiki Access:
List all infrastructure services with status and endpoints (
infra_list_services), and refresh service discovery (infra_refresh_discovery).Read wiki pages (
infra_read_wiki) and parse their wikitext into structured sections (infra_parse_wiki).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@infocepo-infra-mcpsearch chromadb for recent AI agent documentation"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
infocepo-infra-mcp
MCP server for infocepo infrastructure services. The HTTP server exposes the
current, stateless Streamable HTTP transport at /mcp, legacy SSE at /sse,
and an OpenAPI facade for diagnostics and direct tool calls.
Requirements
Linux
Python 3.11 or newer
The same installation works on x86_64 H100/DGX and aarch64 DGX Spark hosts. This project does not install or pin CUDA drivers.
Related MCP server: openclaw-tools-mcp
Install and run
./install.sh # safe to repeat; also upgrades dependencies
cp .env.example .env
# Edit .env, then export it into the process environment:
set -a; source .env; set +a
./run.sh 0.0.0.0 8085 # omit PORT to select a free portThe virtual environment is stored at ~/venv/infocepo-infra-mcp, or at
$VENV_DIR when that variable is set. run.sh stays in the foreground and
handles termination normally. It starts infocepo_mcp.sse_server, not the
stdio entry point.
Confirm that the server is running:
curl http://localhost:8085/healthWhen API_TOKEN is configured, connect an MCP client with either supported
authentication header:
URL: http://localhost:8085/mcp
Authorization: Bearer <API_TOKEN>X-API-Key: <API_TOKEN> is accepted as an alternative. The health endpoint is
always public. If API_TOKEN is unset, all endpoints are public; this is useful
for local development but is not recommended on an exposed interface.
systemd example
Because .env is loaded by the Python process but shell variables in it are not
automatically exported, use systemd's EnvironmentFile support:
[Service]
WorkingDirectory=/path/to/infocepo-infra-mcp
EnvironmentFile=/path/to/infocepo-infra-mcp/.env
ExecStart=/bin/bash /path/to/infocepo-infra-mcp/run.sh 127.0.0.1 8085
Restart=on-failureConfiguration
The two API keys have different purposes:
API_TOKENoptionally protects this server's MCP, SSE, and OpenAPI routes.INFOCEPO_API_KEYauthenticates calls from tools to the upstream infocepo LLM, audio, image, and diarization services. Tools that do not use those services can run without it.
Additional credentials enable service-specific tools:
Variable | Used by | Required |
|
| For ChromaDB tools |
|
| For S3 tools |
|
| For S3 tools |
|
| Optional; defaults to |
|
| For registry access |
| All upstream credentials | Optional JSON alternative to environment variables |
| HTTP listener | Optional; defaults to |
| HTTP listener | Optional; defaults to |
| Installer and run script | Optional virtual-environment location |
The credentials JSON file accepts api_key, chroma_token, s3_access_key,
s3_secret_key, registry_user, and registry_password keys. Environment
variables are loaded first; values present in the JSON file override them.
HTTP endpoints
Endpoint | Methods | Purpose |
|
| Public liveness response and tool count |
|
| Stateless Streamable HTTP MCP transport |
|
| Legacy SSE MCP connection |
|
| Legacy SSE client messages |
|
| OpenAPI description of direct tool routes |
|
| Redirect used by Open WebUI probes |
|
| Invoke one tool through the OpenAPI facade |
Except for /health and CORS preflight requests, all endpoints require
API_TOKEN when it is configured.
Tools
The server currently publishes 19 tools:
Area | Tools |
Wiki discovery |
|
LLM and vision |
|
Audio |
|
Images and embeddings |
|
ChromaDB |
|
Summary |
|
Registry |
|
S3 |
|
The four discovery tools all use the same MediaWiki API. A failure reported by
all four therefore normally identifies one shared wiki upstream/path problem;
it does not show that the LLM, audio, image, ChromaDB, registry, or S3 tools
are unavailable. Discovery responses include an upstream object containing
the failing URL, HTTP status when available, and failure kind.
Open WebUI and MCPO
MCPO operations have names such as call_infra_list_services. The call_
prefix belongs to MCPO's generated OpenAPI operation and is not part of the MCP
tool name (infra_list_services).
Start the provided bridge with:
docker compose -f docker-compose.mcpo.yml up -d
docker compose -f docker-compose.mcpo.yml logs -f mcpoThe sample compose file exposes MCPO at http://localhost:8000; its OpenAPI
document is at /openapi.json and Swagger UI is at /docs. The checked-in
mcpo-config/config.json connects MCPO to http://host.docker.internal:8085/mcp.
If the MCP server has API_TOKEN set, add the same bearer token to that file's
headers object, for example:
"headers": {
"Authorization": "Bearer replace-me"
}MCPO_API_KEY is conceptually separate from API_TOKEN: it protects MCPO's
generated OpenAPI API and is configured on the MCPO process/client. The sample
compose file currently passes its MCPO key directly with --api-key.
Check each layer independently:
curl http://localhost:8085/health
curl -H "Authorization: Bearer $API_TOKEN" http://localhost:8085/openapi.json
curl -H "Authorization: Bearer $MCPO_API_KEY" http://localhost:8000/openapi.json
curl "https://infocepo.com/wiki/api.php?action=query&titles=Main_Page&format=json"Other entry points
The package also installs infocepo-mcp, the stdio transport implemented by
infocepo_mcp.server, and infocepo-mcp-http, an alias for the HTTP server.
For normal network operation, prefer run.sh or infocepo-mcp-http.
Tests
uv run pytestAvailable Tools
19 toolschromadb_collectionsB
List all ChromaDB collections in the vector database.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment: prod (default), lab |
chromadb_searchB
Search ChromaDB collections with semantic/vector similarity search.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment: prod (default), lab | |
| query | Yes | Search query (text, not vector — will be embedded automatically) | |
| n_results | No | Number of results to return | |
| collection | Yes | Collection name to search in |
chromadb_upsertC
Upsert documents (with embeddings) into a ChromaDB collection.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment: prod (default), lab | |
| ids | Yes | List of unique IDs for each document | |
| documents | Yes | List of text documents to store | |
| metadatas | No | List of metadata dicts for each document | |
| collection | Yes | Collection name (created if it doesn't exist) |
diarize_audioB
Speaker diarization: identify and separate different speakers in an audio file.
| Name | Required | Description | Default |
|---|---|---|---|
| audio_url | No | URL to download audio from | |
| audio_path | No | Local path to audio file (mp3, wav, etc.) |
embeddings_createB
Generate text embeddings using BGE-M3 model for RAG/search. Returns vector arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Embedding model (default: bge-m3) | bge-m3 |
| texts | Yes | List of texts to embed |
image_generateB
Generate images from text prompts using OpenDalle model.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of images to generate | |
| size | No | Image size (e.g., '1024x1024', '1024x768') | 1024x1024 |
| prompt | Yes | Image description prompt |
infra_list_servicesA
List all infocepo.com infrastructure services with status and endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment to show endpoints for: prod, lab, dev | prod |
| include_status | No | Include health check status (requires HTTP call) |
infra_parse_wikiA
Parse wiki wikitext and return structured sections. Returns list of sections with title and content.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Wiki page title |
infra_read_wikiB
Read a page from the infocepo.com wiki. Useful for discovering new services, configurations, or documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Wiki page title (e.g., 'Main_Page', 'Page_Name') | |
| section | No | Optional: extract only this section (e.g., 'Catalogue rapide des services') |
infra_refresh_discoveryA
Re-fetch and re-parse the wiki Main_Page to discover any changes to services/endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
llm_chatC
Chat completions using the infocepo LLM API (OpenAI-compatible). Supports chat, reasoning, code generation.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model name: ai-default, ai-thinking, ai-fast, ai-embedding, ai-stt, ai-tts, ai-image, ai-vision | |
| messages | Yes | Chat messages array: [{role: 'user'|'system'|'assistant', content: 'text'}] | |
| max_tokens | No | Max tokens in response. | |
| temperature | No | Sampling temperature (0-2). Default 0.7. |
llm_visionA
Image-to-text / OCR / VLM using the ai-vision model. Send an image (URL or base64) and get a description.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | Question about the image, e.g. 'Describe this image' | Décris cette image. |
| image_b64 | No | Base64-encoded image content (if no image_url) | |
| image_url | No | Image URL (http://...) or data:image/... base64 |
registry_listC
List Docker images from the infocepo private registry.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of results (for pagination) | |
| last | No | Name of last entry for pagination |
s3_downloadB
Download a file from S3-compatible storage.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Object key (path in bucket) | |
| bucket | Yes | Bucket name | |
| save_path | Yes | Local path to save the file |
s3_listB
List objects in an S3-compatible storage bucket.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | Bucket name (e.g., 'ORG') | |
| prefix | No | Optional prefix/filter |
s3_uploadB
Upload a file to S3-compatible storage.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Object key (path in bucket) | |
| bucket | Yes | Bucket name | |
| file_path | Yes | Local file path to upload |
stt_transcribeB
Transcribe audio to text using Whisper model. Accepts file path, URL, or base64 audio.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model name (default: whisper-1) | whisper-1 |
| language | No | Language code (e.g., 'fr', 'en'). Auto-detect if omitted. | |
| audio_b64 | No | Base64-encoded audio content | |
| audio_url | No | URL to download audio from | |
| audio_path | No | Local path to audio file (opus, ogg, wav, mp3, m4a) |
summary_textB
Summarize long texts using the infocepo summary API.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to summarize | |
| max_length | No | Max summary length in characters |
tts_speechA
Text-to-speech synthesis using OmniVoice model. Returns audio in opus/wav format.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to synthesize | |
| voice | No | Voice name (e.g., 'coral', 'sage'). Default 'coral'. | coral |
| instructions | No | Voice direction (e.g., 'Speak in a cheerful tone') | |
| response_format | No | Output format: opus, mp3, wav, flac, pcm | opus |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v0.1.0- First observed
chromadb_collections - First observed
chromadb_search - First observed
chromadb_upsert - First observed
diarize_audio - First observed
embeddings_create - First observed
image_generate - First observed
infra_list_services - First observed
infra_parse_wiki - First observed
infra_read_wiki - First observed
infra_refresh_discovery - First observed
llm_chat - First observed
llm_vision - First observed
registry_list - First observed
s3_download - First observed
s3_list - First observed
s3_upload - First observed
stt_transcribe - First observed
summary_text - First observed
tts_speech
TDQS
Scored across 19 tools
Each tool targets a distinct operation within its domain (wiki, LLM, audio, vector DB, registry, S3). Even tools that might seem similar (e.g., infra_read_wiki and infra_parse_wiki) have clear functional differences. No overlapping purposes.
All tools follow a consistent lowercase_underscore naming pattern with domain-specific prefixes (infra_, llm_, stt_, tts_, etc.). Verbs and nouns are used predictably, making the tool surface easy to navigate.
With 19 tools covering multiple distinct domains (infrastructure, AI, storage, registry), the count is on the high side. While each domain has a reasonable subset, the server would benefit from splitting into focused services.
The tool surface is shallow across several domains: wiki/infra is read-only, vector DB lacks collection management, S3 lacks delete/bucket operations, and Docker registry only lists images. Significant gaps exist for full lifecycle management.
Maintenance
Related MCP Connectors
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that exposes 300+ AI agents as tools via a single API key. Supports listing agents, invoking any agent with chat-completion style messages, checking agent health, and retrieving platform statistics.54MIT
- AlicenseBqualityFmaintenanceExposes OpenClaw tools (web search, page fetching, browser automation, PDF analysis, messaging, inter-agent communication, Canvas) as MCP tools for ACP agents.7-
- FlicenseNot gradedqualityDmaintenanceExposes MCP tools that enable remote LLMs to query local Docker containers, OS processes, and system services in real time.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and execute tools via a secure MCP server with JWT authentication, RBAC, rate limiting, and audit logging.1MIT