Extension · moselwal/webmcp

webmcp — das Browser-MCP für Ihr TYPO3.

Web Model Context Protocol Server, der Tools wie Suche, Navigation und Page-Content direkt über navigator.modelContext bereitstellt. KI-Agenten nutzen sie unmittelbar im Browser, mit SecureContext-Checks und CSRF-Nonce — keine externe API nötig.

Das Problem

Wenn der KI-Agent nicht weiterkommt, weil er nichts sieht.

Mit webmcp

  • Standardisiertes navigator.modelContext-API direkt im Browser
  • Built-in-Tools: search, navigation, page-content
  • Eigene Tools registrierbar via ToolProviderInterface
  • SecureContext + CSRF-Nonce, FE-Group-bewusst

Bisher

  • KI-Agenten müssen externe REST-/GraphQL-APIs lernen
  • Auth-Tokens, Rate Limits, Caching-Probleme
  • Tools sind nicht im aktuellen Browser-Kontext verfügbar
  • Jede Site implementiert ein eigenes Tool-Vokabular

Vier Bausteine

Optional: Form-Tool

Mit typo3/cms-form als optionaler Dependency wird auch Formular-Submission als Tool exponiert — KI-Agenten können direkt Anfragen einreichen.

Sicherheit by default

SecureContext-Pflicht (HTTPS), CSRF-Nonce in jeder Tool-Anfrage, Access-Control über TYPO3-FE-Groups respektiert.

Custom Tool Provider

Eigene Tools über ToolProviderInterface registrieren — z.B. um shop-spezifische Such-Funktionen oder Custom-Forms freizugeben.

Built-in Tools

search, navigation, page-content — sofort einsatzbereit nach der Installation.

Installation: composer require moselwal/webmcp

TYPO3: 13.4 – 14.0 · PHP: 8.2+ · Optional: typo3/cms-form (Form-Tool)

Composer-Repository einrichten: gitlab.moselwal.io/api/v4/group/175/-/packages/composer/packages.json als Composer-Repository in deiner composer.json eintragen, dann composer require moselwal/webmcp.

Konfiguration

Site Set aktivieren

Binden Sie das Site Set moselwal/webmcp in Ihre Site-Konfiguration ein.

Settings

In config/sites/<site>/settings.yaml:

 

webmcp:
  enabled: true
  apiBasePath: '/_webmcp/api'
  tools:
    search:
      enabled: true
      maxResults: 20
    navigation:
      enabled: true
      maxDepth: 4
    page-content:
      enabled: true

Eingebaute Tools

Alle Tools respektieren TYPO3-Zugriffsrechte (fe_group, starttime, endtime, hidden). Es werden nur Inhalte ausgeliefert, die für den aktuellen Besucher (anonym oder eingeloggt) sichtbar sind.

ToolBeschreibungInput
searchVolltextsuche über Seiten und Inhaltselemente{ query: string, limit?: int }
navigationSeitenbaum als strukturiertes JSON{ rootPageId?: int, maxDepth?: int }
page-contentStrukturierter Inhalt einer einzelnen Seite{ pageId?: int, slug?: string }

Eigene Tools entwickeln

1. ToolProvider implementieren

 

<?php

use Moselwal\WebMcp\Domain\Contract\ToolProviderInterface;
use Moselwal\WebMcp\Domain\Model\ToolAnnotations;
use Moselwal\WebMcp\Domain\Model\ToolDefinition;

final class ShopToolProvider implements ToolProviderInterface
{
    public function getIdentifier(): string
    {
        return 'shop';
    }

    public function getTools(): array
    {
        return [
            new ToolDefinition(
                name: 'product-search',
                description: 'Search products in the shop',
                inputSchema: [
                    'type' => 'object',
                    'properties' => [
                        'query' => ['type' => 'string'],
                        'category' => ['type' => 'string'],
                    ],
                    'required' => ['query'],
                ],
                annotations: new ToolAnnotations(readOnlyHint: true),
            ),
        ];
    }
}

 

2. ToolHandler implementieren

 

<?php

use Moselwal\WebMcp\Domain\Contract\ToolHandlerInterface;
use Moselwal\WebMcp\Domain\Model\ToolResult;
use Psr\Http\Message\ServerRequestInterface;

final class ProductSearchHandler implements ToolHandlerInterface
{
    public function getToolName(): string
    {
        return 'product-search';
    }

    public function execute(array $input, ServerRequestInterface $request): ToolResult
    {
        // Produkt-Suche implementieren ...
        return ToolResult::success(['products' => $results]);
    }
}

 

Beide Klassen werden automatisch über _instanceof-Tags in der Services.yaml registriert — keine zusätzliche Konfiguration nötig.

Wie es funktioniert

  1. Beim Rendering einer Seite injiziert die Extension JavaScript über den AssetCollector.
  2. Das JavaScript registriert alle aktivierten Tools über navigator.modelContext.registerTool().
  3. Ruft ein KI-Agent ein Tool auf, sendet der Browser einen POST-Request an /_webmcp/api/{toolName}.
  4. Die PSR-15-Middleware validiert Request (CSRF-Nonce, Input) und delegiert an den passenden ToolHandler.
  5. Das Ergebnis wird als JSON zurückgegeben.

Voraussetzungen

Quellcode & Doku

TYPO3 Extension Repository

Nicht im offiziellen TER — Installation ausschließlich über Composer.

Composer-Package

moselwal/webmcp via Moselwal-Composer-Repo.

Composer-Repo öffnen

GitLab (Source of Truth)

Primäres Repository inkl. CI/CD und Composer-Package-Registry.

gitlab.moselwal.io

GitHub

Mirror auf GitHub mit Issues und PRs (Platzhalter — vor Publish verifizieren).

github.com/moselwal/webmcp
Nächster Schritt

Hilfe bei der Integration?

webmcp ist Open Source und für Selbst-Integratoren gedacht. Wenn Sie webmcp für Ihren spezifischen Use Case (eigene Tools, kommerzielle KI-Agenten-Anbindung, Custom-Permissions) integrieren wollen, helfen wir gegen Tagessatz oder als Teil unseres CMS as a Service.

Integration besprechen

Oder direkt schreiben: kontakt@moselwal.de