Model Context Protocol server for Flarum. Gives AI agents full access to any Flarum forum's API: discussions, posts, users, tags, groups, moderation, settings, and third-party extension endpoints.
Strong tool coverage (24 tools) with mostly complete schemas and descriptions. Naming follows verb_noun convention well (flarum_list, flarum_create, flarum_delete). Descriptions are detailed and contextual (avg ~180 chars, within baseline 194). All tools have input schemas with typed parameters. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Some parameter descriptions lack format constraints (e.g., 'maxFieldChars' has no range guidance). Error handling is minimal, no recovery guidance or categorization. Security is strong (API key via env, read-only mode enforced). Composition is excellent: tools are single-responsibility and chainable (flarum_list → flarum_get → flarum_update). Prompts (flarum_dev, flarum_troubleshoot) add domain knowledge but are not tools.
Create any Flarum resource via JSON:API. Provide the resource type, its attributes, and optional relationships. Requires an API key whose user has permission. Example: type="discussions", attributes={ title, content }, relationships={ tags: { data: [{ type: "tags", id: "1" }] } }.
Create a new discussion with an initial post. Convenience wrapper around flarum_create for the common case of starting a discussion.
Delete a Flarum resource by type and id. Used for deleting discussions, posts, users, etc. Requires appropriate permissions.
Flarum 2.0 extension development reference: conventions, contracts, and patterns for building and reviewing extensions. Covers scaffold, composer.json, frontend (TypeScript/Mithril), backend (API/models/migrations), scaling (queues/cache/storage), integrations (realtime/audit/widgets/sitemap), i18n, testing, quality/CI, and release. Pass a topic to narrow to one section.
Managed-hosting only: run a single diagnostic check on the forum. Read-only, recommend-only: diagnose and suggest fixes, never auto-apply.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination) for downstream chaining. flarum_list, flarum_get, flarum_search, flarum_create, flarum_update all lack documented return types.
Numeric parameter constraints missing. 'limit' (default 20, max 50) and 'maxFieldChars' lack min/max bounds in descriptions. LLMs may pass invalid values (negative, zero, or absurdly large numbers).
Error handling lacks recovery guidance. No tool documents what to do on failure (retry, ask user, fatal). flarum_request and flarum_ext_install provide no guidance on HTTP errors or permission failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Fetch a specific page from the official Flarum 2.0 documentation by path.
List all pages in the official Flarum 2.0 documentation.
Search the official Flarum 2.0 documentation for topics, extenders, API endpoints, permissions, and settings.
Disable an enabled extension on the forum.
Enable an installed extension on the forum.
Install an extension via composer. Requires flarum/extension-manager and admin permissions. Opt-in via FLARUM_EXTENSIONS=1.
List installed extensions on the forum, with their versions, enabled status, and compatibility info.
Remove an installed extension via composer. Requires flarum/extension-manager and admin permissions.
Update an installed extension to a newer version. Requires flarum/extension-manager and admin permissions.
Check compatibility of an extension before installing: does it support the forum's Flarum version, PHP version, and installed extensions?
Fetch a single Flarum resource by type and id, optionally including relationships and narrowing fields. Returns full field values by default (no truncation). Example: type="discussions", id="42", include="posts,user".
List or search any Flarum resource collection (discussions, posts, users, tags, groups, notifications, flags, etc., including third-party extension resources). Supports JSON:API filter, include, sort, pagination, and sparse fieldsets. Long text fields are truncated by default to protect context -- raise maxFieldChars or use fields/flarum_get to read full content. Example: type="discussions", filter={ q: "search terms" }, include="user,tags".
Reply to a discussion with a new post. Convenience wrapper around flarum_create for posting replies.
Escape hatch: make an arbitrary request to any Flarum API endpoint, for anything not covered by the typed tools (custom extension routes, non-JSON:API endpoints, etc.). In read-only mode, non-GET methods are refused. Path is relative to the API root, e.g. "/discussions" or "/fof/gamification/ranks".
Full-text search across discussions using Flarum's gambit/search (filter[q]). Long fields are truncated by default. Example: query="upgrade postgres".
Managed-hosting only: triage a boot error or post-update bundle. Reads diagnostic data and recommends fixes (read-only, never auto-applies).
Plain-language guidance for troubleshooting a broken or misbehaving Flarum forum: safe first-aid fixes, how to run `php flarum info` and find logs, what common errors mean, and how to write a redacted support request.
Update (PATCH) any Flarum resource by type and id. Used for editing posts/discussions and for moderation: lock/sticky a discussion, approve/hide a post, change user groups, etc. Example: type="discussions", id="42", attributes={ isLocked: true }.
Return the forum's basic info and the user the configured API key acts as. Useful to verify connectivity and permissions.
Destructive operations lack confirmation step. flarum_delete and flarum_ext_remove are irreversible but have no dry-run or confirmation mechanism. Agents may accidentally delete data.
Prompts (flarum_dev, flarum_troubleshoot) are registered as tools but are knowledge references, not actions. They should be registered as prompts via the prompts capability, not tools. This confuses the tool/prompt boundary.