Msty Admin MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MSTY_HOST | No | Msty installation host | 127.0.0.1 |
| MSTY_AI_PORT | No | Local AI (Ollama) port | 11964 |
| MSTY_TIMEOUT | No | Service timeout in seconds | 10 |
| MSTY_MLX_PORT | No | MLX service port | 11973 |
| MSTY_VIBE_PORT | No | Vibe CLI Proxy port | 8317 |
| ANTHROPIC_API_KEY | No | Required for Bloom judge model (Phase 6) | |
| MSTY_LLAMACPP_PORT | No | LLaMA.cpp service port | 11454 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_msty_installationA | Locate the Msty Studio app, version, database path and service ports on this machine. Use this before other Studio tools when you need paths or to confirm Studio is installed. Read-only. Returns a JSON object with installed, version, database and ports. |
| read_msty_databaseA | Run a read-only query against the Studio SQLite database. Use query=stats or query=tables for overviews, or a SELECT/WITH/PRAGMA statement. Do not use this to change data. Credential columns read as NULL. Returns JSON with query_type and either stats, a table list, or rows. |
| list_configured_toolsA | List MCP and Toolbox tools stored in Studio. Use this for Toolbox contents. Use list_studio_catalogue for entity counts across Studio. Read-only. Returns JSON with tools and tool_count. |
| get_model_providersA | List local inference backends and Studio-configured remote providers, with keys redacted. Use list_models when you only need model names. Use get_status with scope=services for port health only. Read-only. Returns JSON with services, local_models and remote_providers. |
| get_statusA | Report MCP server status, Studio install health, and local service ports in one tool. Use scope=server for this MCP process, scope=install for the Studio app and database, scope=services for Local AI/MLX/Llama.cpp/Vibe/Nexus ports, or scope=all for every section. Read-only. Returns JSON for the chosen scope. |
| export_tool_configA | Export one Studio Toolbox tool configuration by name, toolId or id. Use this to copy a config. Use import_tool_config to save a pack for Toolbox import. Read-only. Returns JSON with the tool config, or an error and available names. |
| sync_claude_preferencesA | Compare Claude Desktop MCP server names with tools already in Msty Toolbox. Use this for a delta report. It does not write to Studio. Import missing tools with import_tool_config. Read-only. Returns JSON with claude_servers, msty_tools and a note that writes stay user-confirmed. |
| generate_personaA | Build a persona JSON pack and, when gated, insert it into Studio SQLite. Use this to create a persona. Use import_studio_pack for a full pack. Always writes a pack under ~/.msty-admin/imports/. SQLite insert needs confirm=true, MSTY_ALLOW_STUDIO_WRITES=1 in the server environment, and Studio must be closed. Name max 100 characters, system prompt max 20000. Returns JSON with pack_path and wrote. |
| import_tool_configA | Save a Toolbox tool config as a JSON pack. Never writes the Studio database. Use this for tools. Use import_studio_pack for personas, prompts, skills and toolsets. Configs with command, args or env are flagged as running a program on your machine and stay pack-only. Returns JSON with pack_path, wrote=false, and launch_risk when present. |
| import_studio_packA | Save a Studio pack as JSON. Tools, toolsets and skills stay pack-only. Personas and prompts insert only with confirm=true and MSTY_ALLOW_STUDIO_WRITES=1, after a backup, and only when Studio is closed. Use generate_persona for a single persona. Length caps apply (name/title 100, description 500, prompt 20000). Returns JSON with pack_path, wrote, status and any error. |
| list_modelsA | List models on a local backend. Use backend=all for every service, or local_ai, mlx, llamacpp, vibe or nexus. Use chat_with_model to talk to a listed model. Read-only aside from local HTTP. Returns JSON with backend and models, or an error when that service is down. |
| query_local_ai_serviceA | Call the Local AI (Ollama-compatible) HTTP API on an allow-list of read and chat paths. Use install_model to pull and set_model_settings to create a variant. Pull and create are refused here. Talks to the local network. Returns JSON with the API body or an allow-list error. |
| chat_with_modelA | Send a chat completion to a local model on Local AI, MLX or Llama.cpp. Use list_models first if you need names. Use ask_frontier for a cloud model. Calls the local OpenAI-compatible /v1/chat/completions endpoint. Not read-only. Returns the backend JSON or an error when the service is down. |
| get_hardware_profileA | Read chip, CPU cores, RAM, GPU/VRAM and Apple Silicon generation for model sizing. Use recommend_model to turn this into a model pick. Read-only. Returns JSON hardware fields. |
| recommend_modelA | Recommend a local model from hardware fit, then 30-day Studio usage when it still fits. Use get_hardware_profile for the raw numbers. Use install_model to pull the pick. Read-only. Returns JSON with the recommendation and a hardware summary. |
| install_modelA | Pull a model through Local AI (Ollama-compatible /api/pull). Use recommend_model to pick a size. MLX and Llama.cpp have no pull API here. Only bare Ollama names (registry.ollama.ai) and hf.co/ paths are allowed. Needs confirm=true to write. Returns JSON with wrote, model and any error. |
| set_model_settingsA | Create a tuned Ollama variant via /api/create from an installed base model. Use install_model first if the base is missing. Does not overwrite an existing name. Needs confirm=true to write. Returns JSON with wrote, variant and a Modelfile preview. |
| get_vibe_proxy_statusA | Check whether the Vibe CLI proxy port is up. Use query_vibe_proxy to send a query. Local HTTP. Returns JSON status or unavailable. |
| query_vibe_proxyA | Send a query to the Vibe CLI proxy. Use get_vibe_proxy_status first if you only need liveness. Local HTTP POST. Returns the proxy JSON or an error when the proxy is down. |
| get_model_performance_metricsA | Read token, latency and call counts from Studio insightsLanguageModelUsage. Use get_insights_usage as the same data under a shorter name. Use get_conversation_patterns for chat shape. Read-only. Returns JSON totals and per-model rows. |
| get_conversation_patternsA | Summarise conversation patterns from Studio data for one model or all models. Use get_model_performance_metrics for speed and token counts. Read-only. Returns JSON pattern stats. |
| compare_model_responsesA | Send the same prompt to several Local AI models and compare latency and a preview of each reply. Use chat_with_model for a full conversation with one model. Calls local inference. Returns JSON with comparisons. Best-effort if a model is cold. |
| optimise_knowledge_stacksA | Suggest Knowledge Stack changes from live Studio Next Gen, draft and compose status. Does not edit stacks. Use list_knowledge_stacks to browse them. Read-only. Returns JSON suggestions. |
| suggest_persona_improvementsA | Suggest persona edits from live Studio personas. Does not write personas. Use generate_persona to create one. Read-only. Returns JSON suggestions. |
| run_calibration_testA | Run heuristic calibration prompts against a Local AI model and store scores in ~/.msty-admin. Use evaluate_response_quality to score a single reply without calling the model. Calls local inference and writes sidecar metrics. Returns JSON with tests_run and average_score. |
| evaluate_response_qualityA | Score a prompt and reply with a local heuristic rubric. Does not call a model. Use run_calibration_test to generate replies first. Read-only. Returns JSON with quality_score, passed and criteria. |
| identify_handoff_triggersA | Flag models that look slow or low-throughput from 30-day Studio insights. This only reports. Use escalate_if_needed or ask_frontier to send a question to the cloud. Read-only. Returns JSON triggers and hook_api. |
| escalate_if_neededA | Send a hard question to Cursor, Grok or Claude via the Frontier helper. Use ask_frontier for the same call without a reason field. Use identify_handoff_triggers to decide whether to escalate. Calls the network. Needs the matching API key. Returns JSON with escalated, answer and hook_api. |
| get_calibration_historyA | Read calibration scores from the sidecar metrics database under ~/.msty-admin. Use run_calibration_test to add rows. Read-only. Returns JSON history rows. |
| bloom_evaluate_modelA | Run a Bloom behavioural evaluation on a local model. Never invents a score. Needs ANTHROPIC_API_KEY and a Bloom checkout. Use bloom_validate_model first. Calls the network. Returns JSON with quality_score or an honest error and quality_score null. |
| bloom_check_handoffA | Decide from Bloom history whether a model should hand off a task category. Does not call Bloom. Use bloom_evaluate_model to add history. Read-only. Returns JSON handoff advice. |
| bloom_get_historyA | Read persisted Bloom evaluation rows from ~/.msty-admin/bloom-history.json. Use bloom_evaluate_model to add rows. Read-only. Returns JSON evaluations. |
| bloom_list_behaviorsA | List Bloom behaviours this server can evaluate. Use bloom_evaluate_model with one of these ids. Read-only. Returns JSON behaviors and count. |
| bloom_get_thresholdsA | Read quality thresholds and handoff triggers for a task category. Use bloom_check_handoff to apply them to history. Read-only. Returns JSON thresholds. |
| bloom_validate_modelA | Check whether a local Ollama model is reachable and suitable for Bloom. Use this before bloom_evaluate_model. Local HTTP. Returns JSON validation fields. |
| list_studio_catalogueA | Return row counts for every known Studio entity type. Use a specific list_* tool for the rows themselves. Read-only. Returns JSON counts. |
| list_workspacesA | List Studio workspaces. Use get_studio_entity with entity=workspaces for one workspace, and list_studio_catalogue for counts. Read-only. Returns JSON items up to limit. |
| list_personasA | List personas from Persona Studio. Use generate_persona to create one, list_shadow_personas for Shadow Personas, and get_studio_entity for one row. Read-only. Returns JSON items up to limit. |
| list_shadow_personasA | List Shadow Personas, which are variants of ordinary personas. Use list_personas for the main Persona Studio list, and get_studio_entity for one row. Read-only. Returns JSON items up to limit. |
| list_crewsA | List Crew Mode crews from Studio. Use get_studio_entity with entity=crews for one crew, and list_personas for members. Read-only. Returns JSON items up to limit. |
| list_knowledge_stacksA | List Knowledge Stacks, including Next Gen stacks. Use optimise_knowledge_stacks for suggestions, and get_studio_entity for one stack. Read-only. Returns JSON items up to limit. |
| list_turnstilesA | List Turnstile and Turnstiles vNext routing definitions from Studio. Use get_studio_entity with entity=turnstiles for one row, and list_studio_catalogue for counts. Read-only. Returns JSON items up to limit. |
| list_skillsA | List Skills Studio preferences and folders. Skills are imported as JSON packs, not SQLite inserts. Read-only. Returns JSON skills and folders. |
| list_live_contextsA | List Live Contexts that Studio injects into chats. Use list_context_studio for attachment files, and get_studio_entity for one row. Read-only. Returns JSON items up to limit. |
| list_promptsA | List Prompts Studio library entries. Use import_studio_pack to add prompts, and get_studio_entity for one row. Read-only. Returns JSON items up to limit. |
| list_context_studioA | List Context Studio attachments and their folders. Use list_live_contexts for Live Context rows, and get_studio_entity for one attachment. Read-only. Returns JSON attachments and folders up to limit. |
| list_agent_plansA | List Agent Mode plans stored in Studio. Use get_studio_entity with entity=agent_plans for one plan, and list_crews for Crew Mode. Read-only. Returns JSON items up to limit. |
| get_studio_entityA | Fetch one Studio entity by catalogue type and id. Use the matching list_* tool to discover ids. Plural keys are canonical. Singular aliases are accepted. Read-only. Returns JSON item or the allowed type list. |
| get_schema_migrationsA | Show recent Drizzle schema migrations from the Studio database. Use get_msty_installation for the app version. Read-only. Returns JSON migrations. |
| export_workflow_packA | Export a read-only workflow pack of personas, tools, turnstiles and stacks. Does not write Studio. Use import_studio_pack to bring a pack back in. Returns JSON pack. |
| get_nexusA | Detect the Msty Nexus local gateway and its port. Use list_models with backend=nexus for model names. Local HTTP. Returns JSON found, endpoint and port. |
| query_nexusB | Call the Nexus OpenAI-compatible gateway with a path. Use list_models with backend=nexus for model names. Local HTTP. Returns the gateway JSON or an error. |
| get_insights_usageA | Read Studio insights usage for one model or all models. Same data as get_model_performance_metrics. Read-only. Returns JSON totals and models. |
| ask_frontierA | Send one hard question to Cursor (default), Grok or Claude and return the answer. Stay as this one tool. Use escalate_if_needed when you also want a reason field. Calls the network. Needs the matching API key. Call once, then stop. Returns the answer text. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 61 tools
Most tools have clearly distinct targets (the list_* family per Studio entity type is clean), but there are several overlapping clusters: status/diagnostic tools (get_service_status, get_server_status, analyse_msty_health, detect_msty_installation) and analytics tools (get_insights_usage, get_model_performance_metrics, analyse_conversation_patterns) are easy to confuse. There are also near-duplicates: escalate_if_needed explicitly just calls ask_frontier, and get_insights_usage is an 'alias' for insights analytics.
Tools overwhelmingly follow a snake_case verb_noun pattern (list_*, get_*, query_*, chat_with_*, export_*/import_*) with consistent domain prefixes (bloom_*, chat_with_*). Minor deviations exist: bloom_list_behaviors uses list without a get_, spelling mixes British (analyse/optimise) with expected conventions, but it remains predictable overall.
At 61 tools the surface is very heavy for a single admin server, far above the 3-15 sweet spot. While the scope is broad (Studio admin, local models, Bloom, Nexus), the count is inflated by many overlapping status and analytics tools that could be consolidated.
Read/discovery coverage is excellent — nearly every Studio entity type has a list_ tool plus get_studio_entity and list_studio_catalogue. However write coverage is thin and gated: entities appear only creatable via pack import with confirm/allow flags, with no explicit create/update/delete tools for personas, crews, workspaces, etc., leaving lifecycle gaps for an admin tool.