survos/mcp-bundle

Exposes a Survos app to AI coding agents as MCP tools (via symfony/ai-mate). Tools are thin wrappers over existing console exports (meta:export, atlas:export, dataset:*), giving agents a queryable view of the app's declared metadata graph and its dataset workflows.

Maintainers

Package info

github.com/survos/mcp-bundle

Type:symfony-bundle

pkg:composer/survos/mcp-bundle

Fund package maintenance!

kbond

Statistics

Installs: 29

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

2.10.14 2026-06-17 12:11 UTC

README

Exposes a Survos application to AI coding agents as MCP tools, via symfony/ai-mate.

The goal: when an agent is asked to "design a dashboard for a tenant" or "show me how to display this entity's fields", it can query the app's declared metadata (field-bundle #[Field] / #[RouteMeta] / #[RouteIdentity], atlas's route/entity graph) instead of guessing from variable names — and it can drive dataset workflows (dataset:head, import:convert) by intent.

Status: repurposed scaffold (2026-06). This bundle previously held an experimental MCP client (JSON-RPC over Symfony HttpClient). That code was removed: the official mcp/sdk Mcp\Client fully supersedes it (typed results, cursor pagination, progress callbacks, HTTP and stdio transports, and it accepts a PSR-18 client — so you can still pass Symfony's Psr18Client). The bundle now goes the other direction: it provides tools to an agent. See PLAN.md for the full design and build steps.

Architecture

  • Transport = ai-mate. This bundle declares extra.ai-mate.scan-dirs: ["src/Mcp"] and ships #[McpTool] classes (Mcp\Capability\Attribute\McpTool, from mcp/sdk).
  • Tools wrap existing exports — they don't reinvent them. meta:export (field-bundle) and atlas:export (atlas-bundle) already emit the metadata graph; the dataset commands already exist. MCP tools call them.
  • Why wrappers, not services: ai-mate builds its own standalone container and never boots the app kernel, so a #[McpTool] cannot autowire app compile-time services (EntityMetaRegistry, DatasetResolver, …). Each tool therefore runs bin/console <command> --format=json via symfony/process and returns the parsed JSON. The in-app console command is the real engine.

Tools (planned — see PLAN.md)

Tool Wraps Answers
describe_entity meta:export --entity --fields fields, facets, widgets, URL identity for displaying an entity
routes_for_entity meta:export --entity routes by Purpose — "design a dashboard for a tenant"
find_routes_injecting meta + atlas routes that inject an entity (declared + inferred candidates)
suggest_pages meta:export gaps missing routes worth adding
atlas_attributes / atlas_query atlas:export the raw attribute/route/entity map
dataset_head / dataset_list / dataset_convert dataset:* / import:convert dataset workflows by intent
survos_command any bin/console generic long-tail fallback

Installation

composer require survos/mcp-bundle

Then, in the host app: register the bundle, run vendor/bin/mate discover, and enable the extension in mate/extensions.php. Verify with vendor/bin/mate debug:capabilities --format=json.

Requires

PHP 8.4+, Symfony 8.1+. Extends Survos\Kit\AbstractSurvosBundle.