Stellify MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STELLIFY_API_URL | No | Stellify API base URL | https://api.stellisoft.com/v1 |
| STELLIFY_API_TOKEN | Yes | Your Stellify API token obtained from Settings -> API Tokens |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_stellify_framework_apiA | Get Stellify Framework API reference with full type signatures. Import from "stellify-framework". Returns composables (useForm, useAuth, etc.) with options/returns, utilities (Http, Collection, etc.) with methods/staticMethods, and validation rules. Each item includes summary, type signatures, and JSDoc descriptions. Collection is iterable with v-for. |
| get_projectA | Get active project. Returns uuid, name, branches, and directories array. |
| create_fileA | Create an empty file shell in a Stellify project. Returns file UUID. For PHP: type='class', 'model', 'controller', or 'middleware'. For Vue: type='js', extension='vue'. Auto-creates app.js and template route. Pass 'includes' array for framework class dependencies (auto-resolved to UUIDs). Use 'models' array in save_file for project models. IMPORTANT - Check appJs response for Vue components:
|
| create_methodB | Create a method in a file. Pass 'body' to include implementation. Async auto-detected from |
| add_method_bodyA | Append code to an existing method. Use this when you need to ADD MORE code to a method that already has statements. For new methods: Use Nested code is handled correctly. The parser tracks brace/bracket/paren depth and only splits on semicolons at the top level. Arrow functions with block bodies, computed properties, and other nested constructs work as single statements. Pass 'types' to specify TypeScript types for variables declared in the code. IMPORTANT: This APPENDS to existing method statements. To REPLACE a method's code entirely:
|
| save_methodA | Update a method's properties. Use add_method_body to append code. For significant changes, include context fields: summary, rationale, references, decisions. |
| search_methodsA | Search for methods in the project by name or within a specific file |
| search_attributesA | Search for available PHP 8 attributes in Laravel. Returns attribute suggestions with descriptions, namespaces, targets (class/method/property/parameter), and expected arguments. Use this before adding attributes to files or methods to find the correct attribute name and syntax. Three modes of operation:
|
| analyze_attributesA | Analyze PHP 8 attribute usage across a Stellify project. Useful for auditing, finding missing attributes, and searching attribute values. Three modes:
Example queries:
|
| delete_methodA | Delete a method from a file by UUID. This permanently removes the method and all its code. Requires both the file UUID and method UUID. |
| get_methodA | Get a method by UUID. Returns the method data including its parameters and body. |
| search_filesB | Search for files in the project by name or type |
| create_routeA | Create a route/page. For API routes, you MUST pass BOTH controller AND controller_method UUIDs to wire execution. IMPORTANT: Both 'controller' (file UUID) and 'controller_method' (method UUID) are required together for API routes to execute code. Without both, the route won't run any code. Route params like {id} auto-inject into controller method parameters when names match. |
| get_routeA | Get a route/page by UUID. Returns route details including name, path, and attached elements. Use this to look up a route you created or to find existing routes in the project. |
| save_routeA | Update a route/page. Wire to controller with both controller and controller_method UUIDs. For significant routes, include context fields. |
| delete_routeA | Delete a route/page from the project by UUID. This permanently removes the route. WARNING: This is destructive and cannot be undone. Any elements attached to this route will be deleted also. |
| search_routesA | Search for routes/pages in the project by name. Use this to find existing routes before creating new ones. Returns paginated results with route details including UUID, name, path, and type. Use the returned UUID with html_to_elements (page parameter) or get_route for full details. |
| create_elementB | Create a UI element. Provide page (route UUID) for root elements, or parent (element UUID) for children. |
| update_elementA | Update a UI element. Data object: tag, classes, text, event handlers (method UUIDs), classBindings. Set 'name' on root elements to create Blade views (e.g., name="notes.index" for view('notes.index')). For elements inside @foreach loops (SSR/Blade):
Use these attributes to reference the loop variable (defaults to
For hrefs with path prefixes (IMPORTANT):
For complex Blade expressions in attributes: Use expression attributes when you need more than simple field access:
Examples:
For Blade text content:
Use the |
| get_elementA | Get a single element by UUID. Returns the element data with all its attributes. |
| get_element_treeB | Get an element with all its descendants (children, grandchildren, etc.) as a hierarchical tree structure. |
| delete_elementA | Delete an element and all its children (CASCADE). Returns the count of deleted elements. |
| search_elementsA | Search for elements in the project. Useful for finding elements by name, type, or content. Note: To reorder elements, use update_element to modify the parent element's 'data' array with the new order of child UUIDs. |
| html_to_elementsA | Convert HTML to Stellify elements. IMPORTANT - Choose the right approach: For SSR/Blade Pages (WordPress imports, static content, layouts):
For Vue Components (client-side interactivity):
Where elements go:
⚠️ CRITICAL: Multiple Root Elements Limitation When HTML contains multiple root-level elements (e.g., , , ), only the FIRST root element gets attached to the route. Other elements become orphaned! WRONG: CORRECT: Make separate calls for each root element:
OR wrap all elements in a single container div. @click auto-wiring: Pass 'file' UUID to auto-resolve @click="methodName" handlers. Methods must exist in the file first. Blade Syntax Handling: For SSR/Blade pages, do NOT pass raw Blade expressions in text or attributes. The HTML parser stores them literally which causes rendering issues. Instead:
IMPORTANT - Links with path prefixes:
Loop variable: Inside Prefer SVG icons over emoji (encoding issues). |
| get_statementA | Get a statement by UUID. Returns the statement data including its clauses (code tokens). |
| create_statementA | Create empty statement (step 1 of 2). Call add_statement_code next. Prefer create_statement_with_code for single call. |
| create_statement_with_codeA | Create a statement with code in one call. Preferred over two-step create_statement + add_statement_code. Pass 'types' to specify TypeScript types for variables. The assembler infers the full type from code structure:
|
| add_statement_codeA | Add code to an existing statement. This is step 2 of 2 - call this AFTER create_statement. ALTERNATIVE: Use create_statement_with_code for a single-call approach that combines both steps. The statement must already exist (created via create_statement). This parses and stores the code. Examples:
|
| delete_statementB | Delete a statement from a file by UUID. This permanently removes the statement (import, variable, ref, etc.). |
| save_statementB | Update an existing statement. Use this to modify statement properties after creation. |
| save_fileA | Finalize a file. Full replacement - call get_file first to update existing files. Required: uuid, name, type. For significant changes, include context fields: summary, rationale, references, decisions. |
| get_fileA | Get a file by UUID with all its metadata, methods, and statements. |
| delete_fileA | Delete a file from the project by UUID. This permanently removes the file and all its methods/statements. WARNING: This is destructive and cannot be undone. Make sure the file is not referenced elsewhere before deleting. |
| get_directoryA | Get a directory by UUID to see its contents. Use this to inspect directories returned by get_project. The project's data array contains directory UUIDs. Returns the directory name and list of files/subdirectories inside it. |
| create_directoryA | Create a new directory for organizing files. Common directories:
IMPORTANT: Check existing directories first using get_project and get_directory before creating new ones. |
| save_directoryA | Update an existing directory. Use this to rename or modify directory properties. |
| broadcast_element_commandA | Push real-time UI updates via WebSocket. Use for SHOW/DISPLAY/DEMONSTRATE requests. Actions: update (modify element), create (ephemeral element), batch (multiple updates), delete. Changes are EPHEMERAL (not saved). For persistent changes, use update_element or html_to_elements. |
| create_resourcesA | Scaffold Model, Controller, Service, and Migration. Routes are NOT auto-wired - use create_route after. |
| run_codeA | Execute a method in sandboxed environment. Requires file and method UUIDs. Returns output, success, error, and optional benchmark data. |
| request_capabilityA | Log a missing framework-level capability. Creates a ticket in the Stellify backlog. |
| install_packageA | Install a foundation package into the current project. Creates routes and other resources defined in the package manifest. Returns success with installed counts, or error with code:
|
| analyze_performanceC | Analyze execution performance from logs. Types: full, slow_methods, high_query_methods, high_memory_methods, failure_rates, trend. |
| analyze_qualityB | Analyze Laravel code for quality issues. Types: full, relationships, fillables, casts, routes. Returns actionable suggestions. |
| get_settingA | Get a setting profile by name. Returns key-value pairs accessible via config() in code. |
| save_settingA | Create or update a setting profile. Data is merged with existing values. Access via config('name.key') in code. |
| delete_settingA | Delete a setting profile from the tenant's settings table. WARNING: This permanently removes the entire setting profile and all its values. This cannot be undone. EXAMPLE: { "name": "vote" } This removes the "vote" setting profile entirely. |
| get_patternA | Get a UI pattern checklist (accordion, modal, tabs, dropdown, toast). Returns best practices and common pitfalls. |
| save_patternB | Save or update a UI pattern checklist. Use this to add new patterns or update existing ones based on lessons learned. EXAMPLE: { "name": "accordion", "description": "Collapsible content panels", "checklist": [ "Use v-show for visibility toggle", "Store open state as boolean" ], "example": "const panels = ref([...]);" } |
| list_patternsA | List all available UI pattern checklists. Returns an array of pattern names and descriptions. Use this to discover what patterns are available before building UI components. |
| get_assembled_codeA | Get the assembled source code for a file. Returns the actual Vue SFC or PHP class as it would be rendered. Use this after save_file to verify the component was built correctly:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Stellify-Software-Ltd/stellify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server