dss-mcp-bridge
Provides tools for operating Dataiku DSS instances, including managing projects, datasets, and managed folders, searching dataset rows, exporting projects, uploading files, and administering project permissions.
Click 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., "@dss-mcp-bridgesearch the 'customers' dataset for rows where country is 'France'"
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.
dss-mcp-bridge
Operate Dataiku DSS from any MCP client — Claude Code, Codex CLI, Cursor — over Streamable HTTP.

It is read-only by default, authenticates with bearer tokens, validates Origin and Host
per the MCP specification, and records every tool call. What it exposes is a deliberate
configuration choice, not an accident of what happens to be implemented.
Quick start
Not on PyPI yet — install from the repository:
git clone https://github.com/qsun-aidata/dss-mcp-bridge
cd dss-mcp-bridge
uv sync # or: pip install .cp .env.example .env && chmod 600 .env # set DSS_MCP_DSS_API_KEY
uv run dss-mcp-bridge check # validate config + reach DSS
uv run dss-mcp-bridge serve # listens on 127.0.0.1:58000/mcpThen connect your agent — the server prints the exact snippet for each one:
uv run dss-mcp-bridge client-config claude-code # or codex | cursor | inspectorRelated MCP server: nitro-mcp-server
Connecting an agent
claude mcp add --transport http dataiku http://127.0.0.1:58000/mcp \
--header "Authorization: Bearer $DSS_MCP_TOKEN"Or in .mcp.json (project scope, shared with your team — the token stays in the environment):
{
"mcpServers": {
"dataiku": {
"type": "http",
"url": "http://127.0.0.1:58000/mcp",
"headers": { "Authorization": "Bearer ${DSS_MCP_TOKEN}" }
}
}
}Verify with /mcp.
In ~/.codex/config.toml:
[mcp_servers.dataiku]
url = "http://127.0.0.1:58000/mcp"
bearer_token_env_var = "DSS_MCP_TOKEN"Codex reads the variable at connect time, so the token never lands in the config file.
In ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"dataiku": {
"url": "http://127.0.0.1:58000/mcp",
"headers": { "Authorization": "Bearer ${env:DSS_MCP_TOKEN}" }
}
}
}Clients that support OAuth discovery find the server through the RFC 9728 metadata it
publishes at /.well-known/oauth-protected-resource/mcp.

Permission tiers
DSS_MCP_MODE decides which tools exist. A tool above the active tier is never registered,
so it does not appear in tools/list and a model cannot try to call it.
Mode | Adds | Use for |
| list, get, search | exploration, analysis, RAG |
| create, duplicate, properties, export, upload, dataset writes | building projects |
|
| administration |
list_dku_tools reports the active mode, everything being withheld, and why — so an agent
can explain the limitation instead of guessing.
Tools
Tool | Tier | Description |
| write | Create an empty managed folder in a project. |
| write | Create a project. Returns created=false if the key is already taken. |
| admin | Permanently delete a project, its managed datasets and its output folders. |
| read | Generic Dataiku API bridge (allowlisted read-only methods). |
| write | Duplicate a project into a new project key. |
| write | Export a project to a zip archive on the MCP server host. |
| read | Get the type, schema columns and parameters of one dataset. |
| read | Get the name, owner, description, tags and status of one project. |
| read | List the group permissions set on a project. |
| read | List the datasets in a project. |
| read | List the tools this MCP server exposes, and what it is withholding. |
| read | List every DSS project key visible to this server's API key. |
| read | Search a dataset's rows. |
| admin | Add or replace one group's permissions on a project. |
| write | Update a project's description, tags and/or status. |
| write | Upload a base64-encoded file into a project's managed folder. |
| write | the in-process |
search_dataset streams rows over the REST API with a scan cap; text_query matches any
string column and filters add per-column conditions combined with AND.
dku_call reaches arbitrary methods of the dataikuapi surface. It ships disabled.
DSS_MCP_DKU_CALL=allowlist permits only the read-only names in
dku_call_allowlist.yaml; full removes
that restriction and additionally requires DSS_MCP_MODE=admin. In every mode, attributes
whose name starts with _ are refused, so dunder traversal is never reachable, and the
allowlist gates the accessors used to serialize a result as well as the method you name.
The shipped allowlist covers project and dataset analysis. Instance administration —
connections, users, groups, plugin presets — is left out on purpose, because allowlist mode
registers dku_call at the read tier. Copy the file and point
DSS_MCP_DKU_CALL_ALLOWLIST_FILE at your copy to widen it.
DSS Agent tools
Set DSS_MCP_AGENT_TOOLS=PROJECT_KEY:TOOL_ID,… and each one is registered as an MCP tool
with a validated schema built from its DSS descriptor. A descriptor that cannot be loaded, or
declares a parameter name Python cannot use, is reported in list_dku_tools rather than
silently dropped.
Optional: in-process dataiku
The DSS REST API cannot write dataset rows, so write_dataset_records needs the in-process
dataiku package — which ships with the DSS distribution, not PyPI. Run the bridge on a host
that has it and put the DSS python directory on PYTHONPATH:
PYTHONPATH=/opt/dataiku-dss/dataiku-dss-14.7.3/python dss-mcp-bridge serveEverything else works over REST from any host that can reach DSS_URL. When dataiku is
missing, the affected tools are withheld and list_dku_tools says so.
Configuration
Full list with comments in .env.example; dss-mcp-bridge print-config
shows the effective values with secrets redacted. The essentials:
Variable | Default | Description |
|
| DSS base URL |
| (required) | DSS API key — treat as admin |
|
| Listen address |
| — | URL clients use; widens the Host allowlist |
|
|
|
|
|
|
| — | Bearer token(s) |
| — |
|
| (stderr) | Rotating JSON-lines audit log |
The original script's names (DSS_URL, MCP_PORT, MCP_ACCESS_TOKEN, …) still work and
log a deprecation warning. They will be removed in 1.0.
Deployment
Docker
docker build -t dss-mcp-bridge .
docker run --rm -p 58000:58000 --env-file .env \
-e DSS_MCP_HOST=0.0.0.0 \
-e DSS_MCP_PUBLIC_URL=http://localhost:58000/mcp \
dss-mcp-bridgesystemd (user unit)
uv sync
cp .env.example .env && chmod 600 .env
./scripts/install-service.sh
journalctl --user -u dss-mcp-bridge -fRemote DSS, local agent
The recommended layout is the bridge on the DSS host bound to loopback, reached through an
SSH tunnel — no open port, no LAN exposure, and 127.0.0.1 stays a valid Host:
ssh -N -L 58000:127.0.0.1:58000 you@dss-hostTo expose the port directly instead, set DSS_MCP_TOKEN (the server refuses to bind a
non-loopback address without one) and DSS_MCP_PUBLIC_URL, and terminate TLS in front.
Security
Full model in docs/security.md; SECURITY.md covers
reporting. In short:
MCP endpoint access ≈ the privileges of
DSS_MCP_DSS_API_KEY. Treat the endpoint as you would that key.Loopback bind by default; binding anything else without a token is refused at startup.
Bearer tokens are compared as SHA-256 digests in constant time, are never logged, and can be rotated (several at once) while staying individually attributable in the audit log.
OriginandHostare validated on every request (403 / 421), as the MCP spec requires.export_projectcannot write outsideDSS_MCP_EXPORT_DIR;upload_filerejects path-like names.The DSS API key and bearer tokens are scrubbed from errors, logs and audit records.
Verify a running deployment:
./scripts/smoke.sh http://127.0.0.1:58000/mcp "$DSS_MCP_TOKEN"Development
uv sync --all-extras
uv run pytest # tests + coverage gate
uv run ruff format --check src tests scripts
uv run ruff check src tests scripts
uv run mypy
python scripts/gen_tool_table.py --check # README table matches the codeRelated projects
Project | Role |
Unrelated — Ollama plugin for DSS LLM Mesh |
Author
Qian SUN — contact@qsun.fr
Licensed under Apache License 2.0.
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.
Related MCP Connectors
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Streamable HTTP MCP server exposing planner flows, tasks, and squads.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA minimal, containerized MCP server that exposes a Streamable HTTP transport with API key authentication, allowing secure access to MCP endpoints.
- AlicenseNot gradedqualityDmaintenanceEnables MCP client interaction via streamable HTTP, providing example tools (echo, getPostsByUser) and resources (posts, users) with pluggable authentication providers.6MIT
- AlicenseNot gradedqualityBmaintenanceExposes LLM Wiki desktop capabilities via Streamable HTTP transport for MCP clients, enabling project listing, file reading, search, and knowledge graph queries through a secure API.MIT
- AlicenseNot gradedqualityCmaintenanceAn authenticated MCP Streamable HTTP server that exposes Ductor's internal API, enabling agent messaging and task management through MCP tools.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/qsun-aidata/dss-mcp-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server