PHPackages                             konradmichalik/typo3-routing-mcp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. konradmichalik/typo3-routing-mcp

ActiveTypo3-cms-extension

konradmichalik/typo3-routing-mcp
================================

Expose annotated typo3-routing frontend routes as MCP tools via a Streamable HTTP endpoint.

0.1.0(today)00GPL-2.0-or-laterPHPPHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0CI passing

Since Jul 30Pushed todayCompare

[ Source](https://github.com/konradmichalik/typo3-routing-mcp)[ Packagist](https://packagist.org/packages/konradmichalik/typo3-routing-mcp)[ RSS](/packages/konradmichalik-typo3-routing-mcp/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (16)Versions (2)Used By (0)

[![Extension icon](Resources/Public/Icons/Extension.png)](Resources/Public/Icons/Extension.png)

TYPO3 extension `typo3_routing_mcp`
===================================

[](#typo3-extension-typo3_routing_mcp)

[![Latest Stable Version](https://camo.githubusercontent.com/664056544a5b0719219710e304103fe257e29eee7a5eadbdda74d464e005bf00/68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f7479706f335f726f7574696e675f6d63702f76657273696f6e2f736869656c64732e737667)](https://extensions.typo3.org/extension/typo3_routing_mcp)[![TYPO3](https://camo.githubusercontent.com/b53bdca9ce384fc877701998f476e5f2dbf33c5e3563e6f8bd197b46a3160f35/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332e3425323025374325323031342e332d6f72616e67652e737667)](https://camo.githubusercontent.com/b53bdca9ce384fc877701998f476e5f2dbf33c5e3563e6f8bd197b46a3160f35/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332e3425323025374325323031342e332d6f72616e67652e737667)[![Supported PHP Versions](https://camo.githubusercontent.com/cb296a7ceff596358e9b0725540a793c05fb37d7b272fa37fa173f4d56ae6455/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63702f7068703f6c6f676f3d706870)](https://packagist.org/packages/konradmichalik/typo3-routing-mcp)[![CGL](https://camo.githubusercontent.com/a7a28a3f1654c27a031942b72114509042b5635c8578c607a4a6be86b00f47c1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63702f63676c2e796d6c3f6c6162656c3d63676c266c6f676f3d676974687562)](https://github.com/konradmichalik/typo3-routing-mcp/actions/workflows/cgl.yml)[![Coverage](https://camo.githubusercontent.com/2bb46cbad20e4fc65274f2c8f0d81a5fd0557e86f4745fd81c3b5023b46660e2/68747470733a2f2f696d672e736869656c64732e696f2f636f766572616c6c73436f7665726167652f6769746875622f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63703f6c6f676f3d636f766572616c6c73)](https://coveralls.io/github/konradmichalik/typo3-routing-mcp)[![Tests](https://camo.githubusercontent.com/8a128b512ba23135cab5f665d86cf12e8481b299ebbf0255cb4f0a784b2ba43a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63702f74657374732e796d6c3f6c6162656c3d7465737473266c6f676f3d676974687562)](https://github.com/konradmichalik/typo3-routing-mcp/actions/workflows/tests.yml)[![License](https://camo.githubusercontent.com/d3f9022792c8d7a2f652a4ce08969bcfb98175522a0f819a208dcaaa2c1b89df/68747470733a2f2f706f7365722e707567782e6f72672f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63702f6c6963656e7365)](LICENSE.md)

This extension exposes [`typo3-routing`](https://github.com/konradmichalik/typo3-routing) frontend routes as [MCP](https://modelcontextprotocol.io/) tools over a Streamable HTTP endpoint. Add the `#[McpTool]` PHP attribute to a routed controller method, and an AI agent can invoke your project's own domain endpoints directly, not just generic TYPO3 content operations.

Note

Generic TYPO3 MCP servers can only talk about content: pages, records, files. Your project's own domain endpoints, course search, store locator, whatever your sitepackage needs, are invisible to them. This extension closes that gap: it turns routes you've already declared via `typo3-routing` into MCP tools an agent can call directly.

✨ Features
----------

[](#-features)

- **One attribute, one tool**: add `#[McpTool]` next to an existing `#[Route]`, flush caches, done
- **Streamable HTTP**: a single endpoint (`/_mcp` by default, configurable), bearer-token gated, usable on staging and production
- **Security by construction**: session-scoped authenticators (`FrontendUserAuthenticator`/`BackendUserAuthenticator`) and request-token-protected routes are never exposed, no matter the attribute

🔥 Installation
--------------

[](#-installation)

### Requirements

[](#requirements)

- TYPO3 &gt;= 13.4
- PHP 8.2+
- [![](https://github.com/konradmichalik/typo3-routing/raw/main/Resources/Public/Icons/Extension.png?raw=true)](https://github.com/konradmichalik/typo3-routing/blob/main/Resources/Public/Icons/Extension.png?raw=true) [`konradmichalik/typo3-routing`](https://github.com/konradmichalik/typo3-routing) installed and configured

### Composer

[](#composer)

[![Packagist](https://camo.githubusercontent.com/e96382700ac954cf4d81d80b0061c005850caacee4dbd8dd2fd37bdb8a6d04cb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63703f6c6162656c3d76657273696f6e266c6f676f3d7061636b6167697374)](https://packagist.org/packages/konradmichalik/typo3-routing-mcp)[![Packagist Downloads](https://camo.githubusercontent.com/c88df16d81d903ff577774173cb1582043fc27e23a75e386872d7a6ef4b0c154/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6b6f6e7261646d696368616c696b2f7479706f332d726f7574696e672d6d63703f636f6c6f723d627269676874677265656e)](https://packagist.org/packages/konradmichalik/typo3-routing-mcp)

```
composer require konradmichalik/typo3-routing-mcp
```

### TER

[](#ter)

[![TER version](https://camo.githubusercontent.com/664056544a5b0719219710e304103fe257e29eee7a5eadbdda74d464e005bf00/68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f7479706f335f726f7574696e675f6d63702f76657273696f6e2f736869656c64732e737667)](https://extensions.typo3.org/extension/typo3_routing_mcp)[![TER downloads](https://camo.githubusercontent.com/692c6a0bf0e312a0a9d709f86810704275f3f7c1d6608cd03780acdb990d3d1e/68747470733a2f2f7479706f332d6261646765732e6465762f62616467652f7479706f335f726f7574696e675f6d63702f646f776e6c6f6164732f736869656c64732e737667)](https://extensions.typo3.org/extension/typo3_routing_mcp)

Download the zip file from [TYPO3 extension repository (TER)](https://extensions.typo3.org/extension/typo3_routing_mcp).

🚀 Quick start
-------------

[](#-quick-start)

Add `#[McpTool]` next to an existing `#[Route]`:

```
use KonradMichalik\Typo3Routing\Attribute\Route;
use KonradMichalik\Typo3RoutingMcp\Attribute\McpTool;

#[Route(path: '/api/courses/{id}', name: 'course_show', description: 'Fetch a single course by its numeric ID.')]
#[McpTool]
public function show(int $id): ResponseInterface { /* … */ }
```

Then audit what's exposed, via the TYPO3 console:

```
vendor/bin/typo3 routing:mcp:tools
```

Set a bearer token and point an MCP client at the endpoint. Any client that speaks Streamable HTTP works the same way, just configure the URL and the `Authorization` header:

```
export ROUTING_MCP_BEARER_TOKEN=
```

```
claude mcp add --transport http my-project \
  https://your-project.example.org/_mcp \
  --header "Authorization: Bearer "
```

Or, for clients configured via an `mcp.json`-style file (Cursor, VS Code Copilot, and others):

```
{
  "servers": {
    "my-project": {
      "type": "http",
      "url": "https://your-project.example.org/_mcp",
      "headers": {
        "Authorization": "Bearer "
      }
    }
  }
}
```

Note

Without `ROUTING_MCP_BEARER_TOKEN` (or the env var name configured via the extension's `bearerTokenEnvName` setting) set, the endpoint is entirely inactive, not merely unauthenticated.

The `initialize` response also carries an `instructions` field describing how to use the exposed tools (read-only vs. mutating, RFC 9457 error content). Most MCP clients surface this to the connecting agent automatically.

### Configuration

[](#configuration)

Set these via the extension's TYPO3 Extension Configuration (Admin Tools &gt; Settings &gt; Extension Configuration &gt; `typo3_routing_mcp`):

SettingDefaultDescription`bearerTokenEnvName``ROUTING_MCP_BEARER_TOKEN`Name of the process environment variable holding the expected bearer token.`endpointPath``/_mcp`Request path the middleware listens on. Change this if `/_mcp` collides with something else in your project.🧑‍💻 Contributing
----------------

[](#‍-contributing)

Please have a look at [`CONTRIBUTING.md`](CONTRIBUTING.md).

⭐ License
---------

[](#-license)

This project is licensed under [GNU General Public License 2.0 (or later)](LICENSE.md).

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/11557705846f24da32a0e6e75c460db505c1b847f081ddaa3d27f3ea27f4097b?d=identicon)[konradmichalik](/maintainers/konradmichalik)

---

Top Contributors

[![konradmichalik](https://avatars.githubusercontent.com/u/4558190?v=4)](https://github.com/konradmichalik "konradmichalik (53 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/konradmichalik-typo3-routing-mcp/health.svg)

```
[![Health](https://phpackages.com/badges/konradmichalik-typo3-routing-mcp/health.svg)](https://phpackages.com/packages/konradmichalik-typo3-routing-mcp)
```

###  Alternatives

[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)[typo3/cms-core

TYPO3 CMS Core

3713.2M5.3k](/packages/typo3-cms-core)[eliashaeussler/typo3-warming

Warming - Warms up Frontend caches based on an XML sitemap. Cache warmup can be triggered via TYPO3 backend or using a console command. Supports multiple languages and custom crawler implementations.

22260.2k](/packages/eliashaeussler-typo3-warming)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k58](/packages/friendsoftypo3-content-blocks)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M608](/packages/shopware-core)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

15100.9k](/packages/eliashaeussler-typo3-form-consent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
