{"id":51462485,"url":"https://github.com/dirnbauer/webcon-mcp-chat-bridge","last_synced_at":"2026-07-06T07:00:50.898Z","repository":{"id":368719064,"uuid":"1283048554","full_name":"dirnbauer/webcon-mcp-chat-bridge","owner":"dirnbauer","description":"Webcon MCP Chat Bridge TYPO3 extension","archived":false,"fork":false,"pushed_at":"2026-07-01T21:40:44.000Z","size":166,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T23:25:26.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dirnbauer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-28T13:44:07.000Z","updated_at":"2026-07-01T21:40:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dirnbauer/webcon-mcp-chat-bridge","commit_stats":null,"previous_names":["dirnbauer/webcon-mcp-chat-bridge"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dirnbauer/webcon-mcp-chat-bridge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Fwebcon-mcp-chat-bridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Fwebcon-mcp-chat-bridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Fwebcon-mcp-chat-bridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Fwebcon-mcp-chat-bridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dirnbauer","download_url":"https://codeload.github.com/dirnbauer/webcon-mcp-chat-bridge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Fwebcon-mcp-chat-bridge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35180933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-06T07:00:50.134Z","updated_at":"2026-07-06T07:00:50.878Z","avatar_url":"https://github.com/dirnbauer.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Webcon MCP Chat Bridge\n\nTYPO3 extension that turns Slack, Microsoft Teams, WhatsApp, and other\nchannel adapters into a controlled bridge to `hn/typo3-mcp-server`.\n\nThe extension does not implement a second TYPO3 write layer. Channel requests\nresolve a backend user, then execute MCP tools such as `CreateSite`,\n`WriteTable`, `ImportContent`, `WorkspaceReview`, and `GetPreviewUrl` inside\nTYPO3 with normal permissions, TCA validation, workspaces, history, and\nDataHandler behavior.\n\n## Features\n\n- Public token-protected MCP chat bridge API at `/webcon-mcp-chat-bridge/api`\n- Direct MCP tool listing, single calls, and bounded batch execution\n- Opinionated site creation action backed by MCP `CreateSite`\n- Strict document/news text import that only uses supplied text and writes via\n  MCP `WriteTable`\n- DDEV/development bypass for unsigned local requests\n- Slack incoming webhook notifications\n- Slack slash-command adapter for interactive chat commands\n- Slack Events API chatbot adapter for app mentions, direct messages, and\n  uploaded PDF/text-file imports\n- Optional Slack-to-`nr_mcp_agent` wrapper for free-form AI request/response\n  chat without a Flue sidecar\n- Slack context wrapper that keeps one AI conversation per Slack thread and\n  injects Slack/TYPO3 context into each request\n- Microsoft Teams webhook/adaptive-card notifications\n- WhatsApp Cloud API notifications\n- Backend user settings for provider preferences and external identity mapping\n- Workspace actions:\n  - list pending workspace records\n  - move selected records to an approval stage\n  - move selected records to `Ready to publish` and publish them\n- `@claude` mentions inside TYPO3 (GitHub-style):\n  - workspace stage-change comments containing `@claude …` get an AI reply\n    posted back into the workspace comment history\n  - internal notes (`sys_note`) containing `@claude …` are answered with a\n    new note on the same page\n  - a **Claude Chat** backend module (Tools) with workspace selector, powered\n    by the same optional `nr_mcp_agent` brain as the Slack chatbot\n- AI workspace reviewer with per-workspace settings on the `sys_workspace`\n  record (AI Review tab): review \u0026 recommend (default), advance stage on\n  approval, or full auto-publish; every verdict is audited in\n  `tx_webconmcpchatbridge_ai_review` (see `Documentation/ClaudeMentions.rst`)\n\n## Installation\n\nInstall as a path package or move this directory into its own repository:\n\n```bash\ncomposer require webconsulting/webcon-mcp-chat-bridge\nbin/typo3 extension:setup\n```\n\nFor local development in this repository, add it as a Composer path\nrepository in the TYPO3 project that should load it.\n\nThe package requires `hn/typo3-mcp-server`; install and configure that\nextension in the same TYPO3 instance.\n\n## Step-by-step mini manual\n\n1. Install the extension and the TYPO3 MCP server.\n2. Create or choose the backend user that chat actions should run as.\n3. Create an editorial workspace, for example workspace `1`.\n4. Add an approval stage, for example `Chief editor approval` with stage ID `1`.\n5. Configure the bridge and keep tokens/webhooks in environment variables.\n6. Connect backend users to chat identities in the `MCP Chat Bridge` settings\n   tab.\n7. Create a Slack slash command that posts to `/webcon-mcp-chat-bridge/slack`.\n8. For chatbot mode, enable Slack Events API at\n   `/webcon-mcp-chat-bridge/slack/events` and add a bot token.\n9. Test `ping`, `mcp.tools`, and one notification before enabling automation.\n\nMinimal project configuration:\n\n```php\n$slackWebhook = getenv('WEBCON_MCP_CHAT_BRIDGE_SLACK_WEBHOOK') ?: '';\n$slackSigningSecret = getenv(\n    'WEBCON_MCP_CHAT_BRIDGE_SLACK_SIGNING_SECRET'\n) ?: '';\n$slackBotToken = getenv('WEBCON_MCP_CHAT_BRIDGE_SLACK_BOT_TOKEN') ?: '';\n$slackBotUserId = getenv(\n    'WEBCON_MCP_CHAT_BRIDGE_SLACK_BOT_USER_ID'\n) ?: '';\n$teamsWebhook = getenv('WEBCON_MCP_CHAT_BRIDGE_TEAMS_WEBHOOK') ?: '';\n$whatsAppPhoneNumberId = getenv(\n    'WEBCON_MCP_CHAT_BRIDGE_WHATSAPP_PHONE_NUMBER_ID'\n) ?: '';\n$whatsAppAccessToken = getenv(\n    'WEBCON_MCP_CHAT_BRIDGE_WHATSAPP_ACCESS_TOKEN'\n) ?: '';\n\n$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['webcon_mcp_chat_bridge'] = [\n    'enabled' =\u003e true,\n    'apiPath' =\u003e '/webcon-mcp-chat-bridge/api',\n    'slackCommandPath' =\u003e '/webcon-mcp-chat-bridge/slack',\n    'slackEventsPath' =\u003e '/webcon-mcp-chat-bridge/slack/events',\n    'apiToken' =\u003e getenv('WEBCON_MCP_CHAT_BRIDGE_API_TOKEN') ?: '',\n    'allowUnsignedDevelopmentRequests' =\u003e true,\n    'developmentBackendUserId' =\u003e 1,\n    'approvalStageId' =\u003e 1,\n    'defaultWorkspaceId' =\u003e 1,\n    'allowedTables' =\u003e 'pages,tt_content,tx_news_domain_model_news',\n    'slackEnabled' =\u003e true,\n    'slackWebhookUrl' =\u003e $slackWebhook,\n    'slackSigningSecret' =\u003e $slackSigningSecret,\n    'slackBotToken' =\u003e $slackBotToken,\n    'slackBotUserId' =\u003e $slackBotUserId,\n    'teamsEnabled' =\u003e false,\n    'teamsWebhookUrl' =\u003e $teamsWebhook,\n    'whatsappEnabled' =\u003e false,\n    'whatsappPhoneNumberId' =\u003e $whatsAppPhoneNumberId,\n    'whatsappAccessToken' =\u003e $whatsAppAccessToken,\n    'whatsappDefaultRecipients' =\u003e '',\n];\n```\n\nDo not leave `WEBCON_MCP_CHAT_BRIDGE_API_TOKEN` empty outside a local\ndevelopment context. The full TYPO3 documentation entry point is\n`Documentation/Index.rst`; the step-by-step guide is\n`Documentation/QuickStart.rst`.\n\n## Environment variables\n\nUse environment variables for secrets and provider credentials. Do not commit\nreal values to Git.\n\n`WEBCON_MCP_CHAT_BRIDGE_API_TOKEN`\n: A random token you generate yourself. It protects direct JSON API calls to\n  `/webcon-mcp-chat-bridge/api`. Generate one with `openssl rand -hex 32` and\n  send it as `Authorization: Bearer \u003ctoken\u003e`.\n\n`WEBCON_MCP_CHAT_BRIDGE_SLACK_WEBHOOK`\n: Slack incoming webhook URL. It lets TYPO3 post notifications into the Slack\n  channel selected when the webhook was installed, for example `#typo3-lab`.\n  It usually starts with `https://hooks.slack.com/services/...`.\n\n`WEBCON_MCP_CHAT_BRIDGE_SLACK_SIGNING_SECRET`\n: Slack app signing secret from **Basic Information \u003e App Credentials**. It is\n  used to verify requests sent by Slack to `/webcon-mcp-chat-bridge/slack` and\n  `/webcon-mcp-chat-bridge/slack/events`. Configure it before exposing Slack\n  endpoints through a tunnel.\n\n`WEBCON_MCP_CHAT_BRIDGE_SLACK_BOT_TOKEN`\n: Slack bot token, usually starting with `xoxb-`. Required for Slack Events\n  API chatbot replies and uploaded file downloads.\n\n`WEBCON_MCP_CHAT_BRIDGE_SLACK_BOT_USER_ID`\n: Optional Slack bot user ID, for example `U012ABCDEF`. Recommended if you\n  subscribe to normal channel message events.\n\n`WEBCON_MCP_CHAT_BRIDGE_TEAMS_WEBHOOK`\n: Microsoft Teams webhook or Workflow URL for Teams notifications.\n\n`WEBCON_MCP_CHAT_BRIDGE_WHATSAPP_PHONE_NUMBER_ID`\n: WhatsApp Cloud API phone number ID.\n\n`WEBCON_MCP_CHAT_BRIDGE_WHATSAPP_ACCESS_TOKEN`\n: WhatsApp Cloud API bearer token.\n\n`WEBCON_MCP_CHAT_BRIDGE_WHATSAPP_RECIPIENTS`\n: Optional comma-separated fallback WhatsApp recipients in E.164 format.\n\nFull environment documentation is in `Documentation/EnvironmentVariables.rst`.\n\n## API examples\n\nPing the bridge:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\":\"ping\"}'\n```\n\nList MCP tools:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\":\"mcp.tools\",\"backendUserId\":5,\"workspaceId\":1}'\n```\n\nCall one MCP tool:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"action\": \"mcp.call\",\n    \"backendUserId\": 5,\n    \"workspaceId\": 1,\n    \"tool\": \"WriteTable\",\n    \"params\": {\n      \"action\": \"create\",\n      \"table\": \"pages\",\n      \"pid\": 42,\n      \"data\": {\"title\": \"TYPO3 Developer Days\"}\n    }\n  }'\n```\n\nImport exact document text as a page after an existing page:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"action\": \"document.import\",\n    \"backendUserId\": 5,\n    \"workspaceId\": 1,\n    \"afterPageUid\": 505,\n    \"title\": \"News\",\n    \"strict\": true,\n    \"content\": \"News headline\\n\\nExact paragraph from the uploaded document.\"\n  }'\n```\n\nList pending records:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"action\":\"workspace.pending\",\"workspaceId\":1,\"pageUid\":42}'\n```\n\nRequest approval:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"action\": \"workspace.review.request\",\n    \"workspaceId\": 1,\n    \"backendUserId\": 5,\n    \"comment\": \"Ready for chief editor approval\",\n    \"records\": [\n      {\"table\": \"pages\", \"workspaceUid\": 123},\n      {\"table\": \"tt_content\", \"workspaceUid\": 456}\n    ]\n  }'\n```\n\nApprove and publish:\n\n```bash\ncurl -s https://example.test/webcon-mcp-chat-bridge/api \\\n  -H \"Authorization: Bearer $WEBCON_MCP_CHAT_BRIDGE_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"action\": \"workspace.review.approve\",\n    \"workspaceId\": 1,\n    \"backendUserId\": 7,\n    \"comment\": \"Approved in Slack\",\n    \"records\": [\n      {\"table\": \"pages\", \"workspaceUid\": 123}\n    ]\n  }'\n```\n\nProduction approval actions should resolve the actor through a connected\nchat identity. In development context, unsigned requests can use the\nconfigured development backend user.\n\n## Slack slash command examples\n\nPoint a Slack command such as `/typo3-lab` to:\n\n```text\nhttps://example.test/webcon-mcp-chat-bridge/slack\n```\n\nThe endpoint verifies Slack's request signature with\n`WEBCON_MCP_CHAT_BRIDGE_SLACK_SIGNING_SECRET`.\n\nSupported command examples:\n\n```text\nhelp\nping\ntools\npending workspace=1 page=42\nreview workspace=1 table=pages\ncall WorkspaceReview {\"limit\":10}\nrequest pages:123 Ready for chief editor approval\napprove pages:123\n```\n\n## Slack chatbot examples\n\nGenerate a Slack App Manifest instead of configuring Slack screens manually:\n\n```bash\nddev exec vendor/bin/typo3 mcp-chat-bridge:slack:manifest \\\n  --base-url=https://example.trycloudflare.com \\\n  --slash-command=/typo3-lab\n```\n\nIn Slack, create the app from the generated manifest. Then copy the Slack\n`Signing Secret` and `Bot User OAuth Token` into the TYPO3 environment.\n\nCheck setup:\n\n```bash\nddev exec vendor/bin/typo3 mcp-chat-bridge:slack:doctor \\\n  --base-url=https://example.trycloudflare.com\n```\n\nIn Slack:\n\n```text\n@typo3-lab ping\n```\n\nWith a PDF or text file attached:\n\n```text\n@typo3-lab create news in page 123\n```\n\nFree-form AI chatbot mode is available when `netresearch/nr-mcp-agent` is\ninstalled and configured:\n\n```text\n@typo3-lab summarize page 123\n@typo3-lab what content is on page 42?\n@typo3-lab create a draft news from this PDF on page 123\n```\n\nThe Slack adapter keeps one `nr_mcp_agent` conversation per Slack thread and\nTYPO3 backend user. Replies in the same Slack thread can refer to earlier\nmessages, uploaded files, and previous assistant answers. Each request also\ngets a Slack/TYPO3 context wrapper with channel, thread, backend user, and\nworkspace hints. This uses the existing TYPO3 AI Chat configuration; it does\nnot require Flue.\n\nAfter installing or updating the bridge, run `vendor/bin/typo3 extension:setup`\nso TYPO3 creates the Slack thread mapping table.\n\nPDF extraction requires `pdftotext` in the TYPO3 web runtime, for example via\n`poppler-utils` in DDEV.\n\n## Documentation\n\nSee `Documentation/Index.rst` for the TYPO3 documentation entry point.\n\n## Repository mirror\n\nCanonical repository: \u003chttps://github.com/dirnbauer/webcon-mcp-chat-bridge\u003e (composer source).\nInternal mirror: \u003chttps://gitlab.webconsulting.at/dirnbauer/webcon-mcp-chat-bridge\u003e — push to both remotes (`composer`, `gitlab`) when releasing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Fwebcon-mcp-chat-bridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdirnbauer%2Fwebcon-mcp-chat-bridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Fwebcon-mcp-chat-bridge/lists"}