Djelia MCP Server
OfficialClick on "Install 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., "@Djelia MCP ServerTranslate 'How are you?' to Bambara"
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.
๐๏ธ Djelia MCP Server
An MCP server for Djelia โ bring Bambara transcription, translation, and text-to-speech to any LLM.
Built with FastMCP v3 ยท Python 3.11+ ยท uv-managed
โจ Overview
Djelia is a linguistic-AI platform focused on African languages โ currently Bambara (bam_Latn), with translation bridging to French (fra_Latn) and English (eng_Latn).
This server wraps the Djelia REST API behind the Model Context Protocol, so any MCP-compatible client (Claude Desktop, Cursor, Cline, your own agent) can call Djelia's models as native tools โ no SDK glue, no HTTP plumbing in your prompt.
What you get
# | Tool | Direction | V1 / V2 | Returns |
1 |
| โ | โ | JSON list |
2 |
| text โ text | v1 | translated text |
3 |
| audio โ text | v2 | text + segment timing |
4 |
| text โ audio | v2 | audio content block |
Design note: V2 APIs are exposed for transcription and TTS because they supersede V1 (richer voices via
description, format control). True/streamendpoints are omitted โ MCP is request/response, so we aggregate the stream inside the tool. Add raw streaming tools only if a use case needs them.
Related MCP server: speaches-mcp
๐๏ธ Architecture
flowchart LR
subgraph Client["MCP Client"]
LLM["LLM / Agent<br/>(Claude, Cursor, โฆ)"]
end
subgraph Server["djelia-mcp-server (this repo)"]
MCP["FastMCP Server<br/><i>4 tools, stdio ยท sse ยท http</i>"]
HANDLERS["Tool Handlers<br/>translate ยท transcribe ยท tts"]
HTTP["httpx.AsyncClient<br/><i>x-api-key header</i>"]
MCP --> HANDLERS --> HTTP
end
subgraph Djelia["Djelia Cloud API"]
T1["/v1/translate"]
T2["/v2/transcribe"]
T3["/v2/tts"]
end
LLM -- "MCP JSON-RPC" --> MCP
HTTP -- "HTTPS" --> T1
HTTP -- "HTTPS" --> T2
HTTP -- "HTTPS" --> T3Key design choices
One shared HTTP client โ
x-api-keyheader injected once per request; key read fromDJELIA_API_KEYenv var.base64 for audio input โ MCP payloads are JSON; audio bytes travel as base64 so it works across any client. A magic-byte sniffer (
_guess_ext) recovers the right file extension for the multipart upload.Audio output as a content block โ FastMCP's
Audiohelper returns a proper MCP audio block (clients receive it base64-encoded).
๐ง How each tool works
1 ยท list_supported_languages
Returns the language codes you'll pass to translate.
sequenceDiagram
participant C as Client
participant S as MCP Server
participant D as Djelia API
C->>S: list_supported_languages()
S->>D: GET /api/v1/models/translate/supported-languages
D-->>S: [{code, name}, ...]
S-->>C: structured list2 ยท translate
sequenceDiagram
participant C as Client
participant S as MCP Server
participant D as Djelia API
C->>S: translate(source, target, text)
S->>D: POST /api/v1/models/translate (JSON)
D-->>S: { "text": "<translated>" }
S-->>C: structured dictParameters
Name | Type | Values |
| enum |
|
| enum |
|
| string | the text to translate |
3 ยท transcribe (Bambara audio โ text)
The tool decodes base64 โ sniffs the format โ uploads as multipart to the V2 transcription endpoint.
sequenceDiagram
participant C as Client
participant S as MCP Server
participant D as Djelia API
C->>S: transcribe(audio_base64)
S->>S: base64decode + guess_ext (mp3/wav/m4a/ogg)
S->>D: POST /api/v2/models/transcribe (multipart)
alt single text response
D-->>S: { "text": "..." }
else segmented response
D-->>S: [{ text, start, end }, ...]
end
S-->>C: ToolResult (structured + text)4 ยท text_to_speech (text โ Bambara audio)
sequenceDiagram
participant C as Client
participant S as MCP Server
participant D as Djelia API
C->>S: text_to_speech(text, description, format)
S->>D: POST /api/v2/models/tts (JSON)
D-->>S: binary audio bytes
S-->>C: Audio content block (base64)Parameters
Name | Type | Values |
| string | text to synthesize |
| string | voice style, e.g. |
| enum |
|
๐ Quickstart
1 ยท Prerequisites
uv installed
A Djelia API key โ get one at https://console.djelia.cloud
2 ยท Install dependencies
git clone <your-repo-url> djelia-mcp-server
cd djelia-mcp-server
uv sync3 ยท Set your API key
cp .env.example .env
# edit .env:
# DJELIA_API_KEY=your_key_hereThe server reads DJELIA_API_KEY from the environment. It fails fast with a clear message if the key is missing.
๐ Transports
FastMCP supports three transports. Pick the one your client expects.
flowchart TB
subgraph "Transport decision"
STDIO["stdio<br/><b>default</b><br/>Claude Desktop, CLI agents"]
SSE["sse<br/><b>legacy</b><br/>older MCP clients"]
HTTP["http / streamable-http<br/><b>recommended for network</b>"]
end
STDIO -. "stdin/stdout" .-> Srv["FastMCP Server"]
SSE -. "HTTP + EventSource<br/>GET /sse/" .-> Srv
HTTP -. "HTTP POST<br/>POST /mcp/" .-> SrvMode | Command | Endpoint |
stdio (default) |
| โ |
sse (legacy) |
|
|
http |
|
|
streamable-http |
|
|
Override host/port with --host / -p. See all options: uv run fastmcp run --help.
Direct Python (without the fastmcp CLI)
Transport is read from DJELIA_TRANSPORT (stdio | sse | http):
DJELIA_TRANSPORT=sse DJELIA_HOST=127.0.0.1 DJELIA_PORT=8000 uv run python server.py๐ค Client configuration
Claude Desktop / Cursor (stdio)
Drop this into your MCP client config:
{
"mcpServers": {
"djelia": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/djelia-mcp-server",
"fastmcp",
"run",
"server.py"
],
"env": {
"DJELIA_API_KEY": "your_api_key"
}
}
}
}Remote / networked client (SSE or HTTP)
Run the server with -t sse or -t http, then point your client at the endpoint (e.g. http://your-host:8000/mcp/).
๐๏ธ Project layout
djelia-mcp-server/
โโโ server.py # all 4 tools + httpx client + transport switch
โโโ pyproject.toml # uv project (fastmcp + httpx)
โโโ .env.example # DJELIA_API_KEY template
โโโ .gitignore
โโโ README.mdOne file of code โ by design. Tools are co-located because they share one client and one concern (calling Djelia).
๐งช Verifying it works
Smoke-test that all tools register and the server boots on every transport:
# list registered tools
uv run python -c "import asyncio, server; \
[print(' -', t.name) for t in asyncio.run(server.mcp.list_tools())]"
# boot a transport
uv run fastmcp run server.py -t sse -p 8000You should see 4 tools listed, and the FastMCP banner with transport 'sse' followed by Uvicorn running.
๐ References
Djelia API docs โ https://djelia.cloud/redoc
Djelia console (get an API key) โ https://console.djelia.cloud
FastMCP โ https://gofastmcp.com
Model Context Protocol โ https://modelcontextprotocol.io
๐ License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/djelia-org/djelia-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server