digihub-mcp
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., "@digihub-mcplist all published stories"
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.
digihub-mcp
Model Context Protocol server for the digihub.li content API.
Drop this into Claude (Desktop, Code, or any other MCP-aware client) and Claude can read and write Stories, Solutions and Sessions on digihub.li, plus upload images that get used as hero or inline media.
What you'll need from the admin
Before you start, ask the digihub.li admin for two values:
DIGIHUB_BASE_URL— e.g.https://digihub.liDIGIHUB_API_TOKEN— looks like3|abc...(Sanctum personal access token)
The token encodes what you're allowed to do (read / write / delete per resource type). Treat it like a password.
Related MCP server: vulcan-file-ops
Install
Until the npm package is published, install from git:
git clone https://github.com/M0TT3P/digihub-mcp.git
cd digihub-mcp
npm install
npm run buildThe compiled entry point you point Claude at is dist/index.js.
Wire it into your client
Claude Desktop
Open claude_desktop_config.json (on Windows: %APPDATA%\Claude\, on macOS: ~/Library/Application Support/Claude/) and add:
{
"mcpServers": {
"digihub": {
"command": "node",
"args": ["C:/absolute/path/to/digihub-mcp/dist/index.js"],
"env": {
"DIGIHUB_BASE_URL": "https://digihub.li",
"DIGIHUB_API_TOKEN": "PASTE_YOUR_TOKEN_HERE"
}
}
}
}Restart Claude.
Claude Code
Use claude mcp add or add to .mcp.json in your project:
{
"mcpServers": {
"digihub": {
"command": "node",
"args": ["/absolute/path/to/digihub-mcp/dist/index.js"],
"env": {
"DIGIHUB_BASE_URL": "https://digihub.li",
"DIGIHUB_API_TOKEN": "PASTE_YOUR_TOKEN_HERE"
}
}
}
}First call
Prompt Claude: "Use the digihub whoami tool." You should get back your name, email and the list of abilities your token has. If that works, you're set.
Tools
Stories
Tool | Purpose |
| Paginated list. Filters: |
| Fetch a single story by slug. |
| Create a new story. |
| PATCH an existing story by slug — only pass fields you want to change. |
| Soft-delete by slug (only if your token has |
Required on create: slug, title.de or title.en, lead.de or lead.en, format.
Formats: news, case_study, newsletter, use_case, success_story.
Solutions
Same CRUD shape as Stories. Required on create: slug, title, summary. Optional: body, hero_image, icon, business_areas, target_audiences, cta_link, sort_order, tag_slugs.
Sessions (events)
Same shape, plus: format (free text e.g. workshop, training, hackathon), starts_at (ISO datetime, required), ends_at, location, capacity, register_url.
Session status: draft, published, archived, cancelled.
Media
upload_media — provide either file (local file path) or url (server fetches it). Optional subdir: uploads, stories, solutions, sessions. Returns { url, extension, size }. The returned url is what you put into hero_image or media[].url on a subsequent call.
Allowed types: jpg, jpeg, png, webp, avif, gif, svg, pdf. Max 25 MB.
Self
whoami — returns { id, name, email, abilities }. Useful first call to confirm everything works.
Reference data
Pillars
|
| Title |
|
| AI Lab |
|
| Coworking Hub |
|
| Förderprogramme / Funding Programs |
Pass pillar_id (integer) on create/update. The pillar relation is auto-loaded into responses.
Tag types
Tags are grouped by type:
business_area—lab,hub,fundaudience—kmu,verwaltung,startup,finanzdienstleister,industrietopic—ai,datenschutz, …
Pass tag_slugs: ["ai", "kmu"] to attach. Only existing slugs are accepted — the API rejects unknown ones.
Translations
title, lead, summary, body are key-value maps with de and/or en. At least one of the two must be present on create. body accepts Markdown — it's rendered server-side.
End-to-end example
Create a story with an image:
// 1. Upload an image (from a local file path)
{
"tool": "upload_media",
"args": {
"file": "C:/Users/me/Pictures/hero.jpg",
"subdir": "stories"
}
}
// → { "url": "/storage/stories/a1b2c3d4e5.jpg", ... }
// 2. Create the story, referencing that URL
{
"tool": "create_story",
"args": {
"slug": "ki-workshop-im-mai",
"pillar_id": 1,
"title": { "de": "KI-Workshop im Mai", "en": "AI Workshop in May" },
"lead": { "de": "Drei Stunden Hands-on mit echten KMU-Use-Cases." },
"body": { "de": "# Über den Workshop\n\nMarkdown wird gerendert ..." },
"format": "news",
"hero_image": "/storage/stories/a1b2c3d4e5.jpg",
"author_name": "digihub.li Team",
"tag_slugs": ["ai", "kmu"],
"featured": true,
"status": "published",
"published_at": "2026-05-01T08:00:00Z"
}
}You can also upload via remote URL — upload_media with { "url": "https://..." } makes the server pull it and re-host. Same return shape.
Common errors
Symptom | Cause | Fix |
| Token missing, wrong, or revoked | Ask the admin for a fresh token |
Tool returns "403" | Your token doesn't have that ability | Ask the admin to issue a token with the missing ability |
| Slug already used or wrong shape | Slugs are lowercase letters, digits, and dashes only — and must be unique |
| Unknown tag slug | Use only existing tags (see Reference data above) |
Image uploaded but not visible on the site | Browser or CDN cached the old page | Hard-refresh, or wait a couple minutes |
If something else goes wrong, post the tool name + arguments + error message to the admin.
License
MIT — see LICENSE.
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/M0TT3P/digihub-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server