Msty Admin MCP
This MCP server lets an AI app inspect, manage, test, and extend a local Msty Studio setup, with read-only inventory/analytics and gated write/import/escalation workflows.
Inspect Msty installation, version, database path, ports, service health, providers, and Toolbox tools; run read-only Studio SQL.
List Studio entities such as workspaces, personas, shadow personas, crews, knowledge stacks, turnstiles, skills, live contexts, prompts, Context Studio attachments, and agent plans.
Recommend models from hardware/usage, list models across Local AI/MLX/llama.cpp/Vibe/Nexus, chat and compare local models, install Ollama models, and create tuned variants.
Review model performance, conversation patterns, usage/cost insights, knowledge-stack suggestions, and persona improvement suggestions.
Run calibration tests, score response quality, identify handoff triggers, and read calibration history.
Run Bloom behavioral evaluations, validate models, inspect thresholds/history, and get handoff advice.
Export tool/workflow configs and import Toolbox or Studio packs; generate personas and gated-insert personas/prompts into Studio after confirmation, backups, and required env gating.
Query Local AI allow-listed endpoints, Vibe proxy, and Nexus gateway.
Escalate hard questions to Cursor, Grok, or Claude through Frontier handoff tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Msty Admin MCP analyse Msty health"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Msty Admin MCP v6.2.2
Unofficial community project. Not affiliated with, or endorsed by, Msty. Msty is a trademark of its owner.
Msty Studio 3.x is not supported yet. Studio 3.0 can move workspaces to file-based storage, which this release cannot read safely. From v6.2.2 the server detects Studio 3.x and turns off every Studio read and write, so it never reports a stale copy as current or writes a row Studio 3.0 may reject. Model, service, Nexus, calibration and Bloom tools still work. Supported Studio versions are 2.4 to 2.9.x. Persona and prompt writes need a detected Studio 2.4 to 2.9.x, so they are refused when the version cannot be read. On Windows and Linux the Studio version cannot be read yet, so persona and prompt writes are refused there. Import the saved JSON pack in Persona Studio instead. If you rely on the Studio data tools, stay on the Studio 2.x update line for now. Studio 2.x installs stay on that line until you choose the 3.x track.
Let the AI you already use plan, check and look after your local AI in Msty Studio, and let your local model ask for stronger help only when it needs it.
What this does
Msty Studio lets you run AI models privately on your own Mac. Msty Admin MCP lets the AI app you already use, such as Claude Desktop or Cursor, look after that setup for you. You ask in plain words, and it does the technical work.
Picks the right model for your Mac. It checks your chip and memory and suggests a local model that will run well, not one that grinds to a halt.
Installs and tunes it. It downloads the model and can make a tuned copy, for example a calmer, more precise version with a lower temperature and its own instructions.
Tests it honestly. It compares models side by side on the same question, runs standard test prompts, and can check behaviour such as flattery or made-up answers.
Sets up Studio. It can add personas and prompts to Studio, and prepare tool and skill files for you to import.
Keeps an eye on things. It reports health, usage, speed and cost per model.
Gets help when needed. A local model in a Msty chat can pass a question it cannot handle to Cursor, Grok or Claude, and the answer comes back in the same chat.
Safe by default. Looking around never changes anything. Nothing is written into Studio unless you confirm it and have switched writes on yourself, Studio is closed, and a backup has been taken first. Tools and skills are only ever saved as files for you to import. Keys and passwords are hidden from the AI. The detail is in Security and data access.
Related MCP server: IBM Cloud MCP Server
The hybrid setup
Your Mac does the everyday work for free and in private. A stronger cloud AI steps in only for the hard questions.
Recommend. Your AI reads your hardware and suggests a model that fits, preferring one you already use if it still fits.
Set up. It installs that model in Msty's Local AI once you confirm.
Test. It runs test prompts, compares models on the same question, and can run Bloom behaviour checks.
Tune. It makes a tuned copy of the model with your chosen temperature, length limit and instructions. Your original model is left alone.
Configure Studio. It writes personas and prompts into Studio when you allow it, and saves tools and skills as import files.
Work locally. You chat with your local model in Msty as usual.
Escalate. When a question is too hard, the local model hands it to Cursor, Grok or Claude and shows you the answer.
flowchart LR
R["Recommend"] --> S["Set up"]
S --> T["Test"]
T --> U["Tune"]
U --> C["Configure Studio"]
C --> W["Work locally"]
W --> E["Escalate when needed"]
E --> WYour AI as the architect
flowchart LR
Y["You describe the setup you want"] --> A["Your AI (Claude Desktop, Cursor or another MCP app)"]
A --> M["msty-admin-mcp"]
subgraph Reads["Reads your Studio"]
I["Personas, prompts, skills, turnstiles, Knowledge Stacks, Toolbox tools"]
end
subgraph Writes["Writes"]
P["Personas and prompts: only when you allow it"]
V["Tools, toolsets and skills: saved as import files"]
end
M --> Reads
M --> Writes
Writes --> X["A backup is taken before any change"]A local chat asking for help
sequenceDiagram
participant You
participant Local as Local model in Msty
participant F as Frontier helper
participant C as Cursor, Grok or Claude
You->>Local: Ask a question
Local->>F: Hard question
F->>C: Pass the question on
C-->>F: Answer
F-->>Local: Answer
Local-->>You: Answer in the same chatFor this to work, the chat uses a small toolset holding only the Frontier helper, and you need an API key for the service that answers. Setup is in Hybrid local model and Cursor agent.
What you can do
Once the server is added to your AI app, ask as you normally would. You never need to name a tool, because the AI picks the right one. The groups below cover all 54 tools. The full names are in Tools summary.
Know your machine and pick a model
It reads your chip, memory and graphics, then recommends a model sized to run well on them, preferring one you already use.
"What hardware is this Mac, and which local model fits?"
"Recommend a model for summarising long documents."
"Which local models do I have, and are Local AI, MLX and llama.cpp running?"
Install and tune local models
It installs models in Msty's Local AI once you confirm, and makes tuned copies with your settings. MLX and llama.cpp models still download inside Msty, but you can chat with them from here.
"Install llama3.2:3b on Local AI."
"Make a cooler variant of that model with temperature 0.2."
"Chat with this local model / MLX model / llama.cpp model."
Keep Msty healthy
It checks that Msty is installed and running, which version you have, which services are up, and how your providers are set up, with keys hidden. It can also show which tools you have in Claude Desktop but not in Msty.
"Is my Msty install healthy, and which version is it?"
"What is the MCP server status?"
"Show the delta between my Claude Desktop MCP servers and Msty Toolbox."
See what is in Studio
It lists what you have built in Studio, such as workspaces, personas, crews, Knowledge Stacks, prompts, skills and Toolbox tools, without changing anything. It can also export a workspace as a file.
"List my personas, knowledge stacks and workspaces."
"Show the tools in my Toolbox and export one config."
"Export a workflow pack for this workspace."
Bring personas, prompts, skills and tool configs into Studio safely
Everything it creates is first saved as a file in ~/.msty-admin/imports/. Personas and prompts go straight into Studio only when you confirm and have switched writes on (MSTY_ALLOW_STUDIO_WRITES=1). Tools and skills stay as files you import in Toolbox, and any tool that would run a program on your Mac is flagged.
Personas are written in the same shape Studio 2.9 uses for its own. Quit Studio before a write, because writes are refused while it is running. If your Msty plan does not include Persona Studio, the persona is still saved in Studio but the persona list does not show it.
"Write a persona called Research Assistant into Studio."
"Save this tool config as a pack I can import in Toolbox."
"How could my personas and Knowledge Stacks be better?"
Compare, calibrate and Bloom-evaluate
It shows two models' answers side by side, runs built-in test prompts, and scores a single reply. With Anthropic's Bloom framework and an Anthropic key, it also checks behaviour such as flattery, made-up answers and overconfidence. Without them it says so rather than inventing a score.
"Compare qwen2.5 and mistral on this prompt."
"Test llama3.2 on reasoning and coding."
"Run a Bloom evaluation for sycophancy on this model."
Escalate to Grok, Claude or Cursor
From a local-model chat, a hard question can go to Cursor, Grok or Claude, and the answer comes back in the same chat. It can also decide for you whether a question needs handing off. See Hybrid local model and Cursor agent.
"Ask Grok why this SwiftUI view is not updating."
"Ask the Cursor agent on this Mac."
"Should this question be handed off?"
Usage insights and cost
It shows how much each model is used, how fast it is and what it costs, along with patterns in your conversations.
"Show model performance metrics and cost for the last 7 days."
"Analyse my conversation patterns."
"What did I use on Nexus, and which models does it expose?"
What it can see in Studio
flowchart TD
Q["Your question in plain words"] --> M["msty-admin-mcp"]
M --> P["Personas"]
M --> K["Knowledge Stacks"]
M --> W["Workspaces"]
M --> T["Toolbox tools"]
M --> CS["Context Studio"]
M --> CR["Crews"]
M --> PR["Prompts and skills"]
M --> TU["Turnstiles"]
M --> LM["Local models"]
M --> IN["Usage insights"]Who this is for
Msty Studio users who want their usual AI app to help choose, test and organise their local models, and who want local models to call on a stronger agent only when a question is beyond them, without leaving the chat. You do not need to know how MCP works beyond adding a server to your app.
Security and data access
Inventory, analytics and free-form SQL stay read only. Credential columns always read as NULL. Secrets typed into free text, such as a chat message or a note, are out of scope.
Write tools always save a JSON pack under
~/.msty-admin/imports/(mode0600, directory0700).import_tool_configand the tools, toolsets and skills keys ofimport_studio_packnever write the Studio database. Import that pack in Toolbox. Configs withcommand,argsorenvare flagged as running a program on your machine.Personas and prompts insert into Studio SQLite only when
confirm=true, the operator envMSTY_ALLOW_STUDIO_WRITES=1and a detected Studio 2.4 to 2.9.x are all present. On Windows and Linux the Studio version cannot be read yet, so these writes are refused there. The LLM cannot set that env through a tool argument. Writes take a SQLite backup (including WAL) under~/.msty-admin/backups/and refuse while Msty Studio is running against the live database. Tests use fixture copies, never the live DB.query_local_ai_serviceis allow-listed (tags, version, show, chat). Pull and create go throughinstall_modelandset_model_settings, which also needconfirm=true.Calibration and Bloom history live under
~/.msty-admin/, not in Studio.Frontier needs
CURSOR_API_KEYfor Cursor,XAI_API_KEYfor Grok, orANTHROPIC_API_KEYfor Claude. Keys stay in Msty's toolbox environment and never belong in this repository. In ask mode the Cursor agent does not send mail, move or delete files, or use trading tools.
Requirements: Python 3.10+, MCP SDK v1.0.0+, psutil 5.9.0+
macOS ships python3 3.9. This package will not install on that interpreter. Use Homebrew Python 3.12 (or any 3.10+) as shown below.
New to Bloom? Jump to the Bloom Behavioural Evaluation section or read the full Bloom guide.
Installation
Quick Start
Python 3.10 or newer is required. On macOS the system python3 is 3.9, so create the venv with Homebrew Python:
brew install python@3.12
python3.12 -m venv .venv
source .venv/bin/activate
pip install msty-admin-mcp
msty-admin-mcp # Runs on stdio (default MCP transport)If you already have Python 3.10+ as python3, python3 -m venv .venv is enough. Then pip install msty-admin-mcp as above.
If pip install msty-admin-mcp cannot find the package, install the release straight from GitHub:
pip install "msty-admin-mcp @ git+https://github.com/M-Pineapple/msty-admin-mcp@v6.2.2"With HTTP Transport
pip install "msty-admin-mcp[http]"
msty-admin-mcp --transport streamable-http # Runs on http://localhost:8000From Source
git clone https://github.com/M-Pineapple/msty-admin-mcp
cd msty-admin-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[test]"
pytest tests/ -vThis server targets the 1.x MCP Python SDK (mcp>=1.0.0,<2).
Claude Desktop and Cursor
After pip install msty-admin-mcp, the console script msty-admin-mcp is on that environment's PATH. Point the host at it.
Claude Desktop: merge into ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"msty-admin": {
"command": "msty-admin-mcp"
}
}
}Cursor: merge into ~/.cursor/mcp.json:
{
"mcpServers": {
"msty-admin": {
"command": "msty-admin-mcp"
}
}
}If the host cannot see the script, set command to the absolute path of msty-admin-mcp inside the venv (…/bin/msty-admin-mcp). Restart the host after editing.
The Frontier one-tool server is separate. See Hybrid local model and Cursor agent.
Configuration
Environment variables (all optional, sensible defaults):
# Msty installation host
MSTY_HOST=127.0.0.1
# Service backend ports (also read from Studio Gifnoc.nosj when present)
MSTY_AI_PORT=11964 # Local AI (Ollama)
MSTY_MLX_PORT=11973 # MLX service
MSTY_LLAMACPP_PORT=11454 # LLaMA.cpp service
MSTY_VIBE_PORT=8317 # Vibe CLI Proxy
MSTY_NEXUS_PORT=11434 # Msty Nexus OpenAI-compatible gateway
# Service timeout
MSTY_TIMEOUT=10 # Seconds
# Bloom integration (required for Phase 6 tools)
ANTHROPIC_API_KEY=sk-... # Required for Bloom judge modelArchitecture
Studio 2.9+ data layout
Msty Studio no longer uses a top-level msty.db. The workspace SQLite lives under the Chromium File System API path, for example:
~/Library/Application Support/MstyStudio/
├── Gifnoc.nosj # service config (ports / model paths)
├── models/ models-mlx/
└── File System/000/t/00/00000000 # Drizzle SQLite workspace DBThe MCP auto-detects /Applications/MstyStudio.app, reads the bundle version, resolves the SQLite blob, and opens it read-only.
Service discovery
Msty Studio Desktop
├── Local AI (Ollama) → port 11964
├── MLX → port 11973
├── LLaMA.cpp → port 11454
├── Vibe CLI Proxy → port 8317
└── Msty Nexus (optional) → port 11434
↓
MCP Server (stdio / HTTP)
├── Phase 1: Foundational (5)
├── Phase 2: Configuration (5)
├── Phase 3: Service Integration (9)
├── Phase 4: Intelligence (5)
├── Phase 5: Calibration (5)
├── Phase 6: Bloom Evaluation (6)
├── Phase 7: Studio Inventory (15)
├── Phase 8: Nexus Bridge (3)
└── Phase 9: Frontier handoff (1)Hybrid local model and Cursor agent
A local model does the ordinary work. When a question is past it, that model calls ask_frontier. The default provider is the Cursor agent on this machine. Set provider to grok (XAI_API_KEY) or claude (ANTHROPIC_API_KEY) to use those APIs instead. A follow-up resumes that provider's session.
Msty Studio has no hook API. escalate_if_needed and the "Local with frontier escalation" persona are the honest equivalent: the local model must emit a real tool call.
Use a separate one-tool server for the local-model chat. The full admin server has 54 tools. A small model will call those other tools (GitHub, search, schema, and so on) instead of waiting for the answer.
Fresh install
Install this package and the Cursor agent CLI (
cursor-agent). It must be on the PATH seen by Msty, or at~/.local/bin/cursor-agent. Login and API keys: Cursor CLI authentication.Create a user API key in Cursor Dashboard, API Keys. An admin key does not work. Do not commit the key and do not put it in this repo.
In Msty, add a toolbox server named Frontier. From a source checkout:
{
"command": "/absolute/path/to/venv/bin/python",
"args": ["-m", "src.frontier_main"],
"env": {
"PYTHONPATH": "/absolute/path/to/msty-admin-mcp",
"CURSOR_API_KEY": "your-user-api-key"
}
}After pip install, the console script msty-frontier is the same one-tool server. You can set command to that script and omit PYTHONPATH. For Grok or Claude, add XAI_API_KEY or ANTHROPIC_API_KEY, and optionally MSTY_FRONTIER_PROVIDER.
Create a toolset that contains only this Frontier server. Do not put GitHub, Brave, Trello, or the full admin server in that toolset.
On the local-model chat, select that toolset in the composer (the active-toolset control). The toolset stored on the chat is not what is sent if the composer still has another toolset selected.
Quit Msty and open it again after any toolbox or environment change.
Ask a question the local model cannot already answer. Success is one
ask_frontiercard, then the Cursor reply under it. A normal paragraph with no card means the model answered by itself and Cursor was not asked.
Optional project folder
By default the Cursor agent reads an empty folder under ~/.msty-admin/frontier-workspace. It cannot see your repositories. To let it read one project, set:
"MSTY_FRONTIER_WORKSPACE": "/absolute/path/to/that/project"Ask mode does not send mail, move or delete files, or use trading tools. It can read that folder.
Update from v6.0.0
The admin server still has the Studio inventory tools. Add the Frontier server and the one-server toolset as above. Do not point the local-model chat at the full msty-admin-mcp command.
Caveats
The local model must emit a real tool call. Some small models never do, and then no amount of "please call the tool" in the user message will reach Cursor. A model that can call tools will. It may rewrite your question into a search command. That is still a successful handoff if the card is
ask_frontierand the text under it came from Cursor.cursor-agent statuscan say "not logged in" while ask mode still works withCURSOR_API_KEY. The frontier process passes that variable as--api-key. A browsercursor-agent loginin your terminal is not always visible to the process Msty starts.Several
ask_frontiercalls in one reply share the first Cursor answer. They do not each start a new chat.The last Cursor chat id is stored in
~/.msty-admin/frontier-session.json(mode0600). Delete that file to start a fresh Cursor chat.identify_handoff_triggersscores past speed and latency.escalate_if_neededis the tool that actually sends the question.Grok and Claude sessions are stored in
~/.msty-admin/frontier-grok-session.jsonandfrontier-claude-session.json(mode0600).
Tools summary (54 in total)
Phase 1: Foundational (5)
get_msty_installation: app, version, DB path, portsread_msty_database:stats/tables/ read-only SQLIn read-only SQL, credential columns (key, token, secret, password, auth and header names, URL, config/JSON and command-line columns) always read as NULL. Secrets typed into arbitrary free-text columns, such as a chat message or a note, are out of scope for this tool.
list_configured_tools: Toolbox MCP toolsget_model_providers: services and Studio providers (keys redacted)get_status: MCP, install and local service health.scopeisall,server,installorservices
Phase 2: Configuration (5)
export_tool_config: export a tool by name/idsync_claude_preferences: Claude to Msty delta reportgenerate_persona: persona JSON pack. SQLite insert needsconfirm=true,MSTY_ALLOW_STUDIO_WRITES=1and a detected Studio 2.4 to 2.9.x, so it is refused on Windows and Linuximport_tool_config: JSON pack for Toolbox. Never writes the Studio databaseimport_studio_pack: tools, toolsets and skills stay in the JSON pack. Personas and prompts need the env gate
Phase 3: Service Integration (9)
list_models: Local AI, MLX, llama.cpp, Vibe and Nexus.backenddefaults toallquery_local_ai_service(allow-listed)chat_with_model: Local AI, MLX or llama.cpp.backenddefaults tolocal_aiget_hardware_profile,recommend_modelinstall_model,set_model_settingsget_vibe_proxy_status,query_vibe_proxy
Phase 4: Intelligence (5)
get_model_performance_metrics: from StudioinsightsLanguageModelUsageget_conversation_patternscompare_model_responsesoptimise_knowledge_stacks: live Next Gen / draft / compose statussuggest_persona_improvements
Phase 5: Calibration (5)
run_calibration_test,evaluate_response_qualityidentify_handoff_triggers,escalate_if_needed,get_calibration_history
Phase 6: Bloom Evaluation (6)
bloom_evaluate_model(real evaluator or an honest error, never a fake score)bloom_check_handoff,bloom_get_historybloom_list_behaviors,bloom_get_thresholds,bloom_validate_model
Phase 7: Studio 2.9 Inventory (15)
list_studio_catalogue,list_workspaces,list_personaslist_shadow_personas,list_crews,list_knowledge_stackslist_turnstiles,list_skills,list_live_contexts,list_promptslist_context_studio,list_agent_plansget_studio_entity(plural keys such aspersonas, plus singular aliases such aspersona),get_schema_migrations,export_workflow_pack
Phase 8: Nexus Bridge (3)
get_nexus,query_nexus,get_insights_usage
Phase 9: Frontier handoff (1)
ask_frontier: hand one question to Cursor (default), Grok, or Claude and return the answer in the Msty chat. Use the one-tool server (msty-frontierorpython -m src.frontier_main) for a local-model chat. See Hybrid local model and Cursor agent.
Bloom Behavioural Evaluation
Phase 6 introduces behavioural evaluation powered by Anthropic's Bloom framework. Rather than testing what a model knows, Bloom tests how it behaves. It detects failure modes such as sycophancy, hallucination, and overconfidence that standard benchmarks miss.
See the Bloom Knowledge Base Guide.
Testing
pytest tests/ -vv6 ships unit tests for path resolution, read-only SQL guards, redaction, inventory/analytics, and MCP tool JSON contracts. Live smoke on Studio 2.9.2 was verified during release.
FAQ
Q: How does a local model ask Cursor, Grok, or Claude?
A: Run the one-tool server, put only that server in the chat's toolset, and set CURSOR_API_KEY, XAI_API_KEY, or ANTHROPIC_API_KEY. Pass provider as cursor, grok, or claude. Steps and caveats are in Hybrid local model and Cursor agent. Keys stay in Msty's toolbox environment. They do not belong in this repository.
Q: Why did detection fail on older MCP versions?
A: v5 looked for ~/Library/Application Support/Msty/msty.db. Studio 2.x stores data under MstyStudio and the Chromium File System SQLite path. v6 fixes this.
Q: Can I use this with Msty < 2.4.0?
A: No. v6 targets Studio 2.9+ (works on 2.4+ layouts when the File System DB is present). Use v4.x for older process-based detection.
Q: Does this write to the Studio database?
A: Inventory and analytics stay read-only. Write tools always save a JSON pack under ~/.msty-admin/imports/. Tools, toolsets and skills are import-file only. Personas and prompts insert into Studio SQLite only with confirm=true, MSTY_ALLOW_STUDIO_WRITES=1 in the MCP server environment and a detected Studio 2.4 to 2.9.x, after a timestamped SQLite backup that includes WAL, and they refuse while Msty Studio is running against the live database. Quit Studio first, or import the JSON pack in Persona Studio or Toolbox. On Windows and Linux the Studio version cannot be read yet, so these writes are refused there.
Q: What is the Nexus integration?
A: Msty Nexus is the local runtime/gateway. get_nexus detects it. list_models with backend=nexus lists models on its OpenAI-compatible endpoint (MSTY_NEXUS_PORT).
Licence
MIT Licence. See the LICENSE file.
Contributing
Contributions are welcome. Please open issues or PRs on GitHub.
More MCP servers by M-Pineapple
Other MCP servers in this portfolio:
Dev Project Coordinator. Local desk for AI agents to track coding and non-coding projects, with Analytics and Kanban views.
CryptoAnalysisMCP. Cryptocurrency technical analysis for Claude Desktop.
Warp Command Runner. Give any chat AI a real terminal.
Member Berries. Apple Calendar, Notes and Reminders with personality.
SeaShell. Talk to Claude from any terminal block.
TextEdit MCP. Formatted RTF documents via macOS TextEdit.
HubSpot Auditor. Read-only HubSpot portal audit.
Support this project
If this project has helped enhance your development workflow or saved you time, please support it:
Your support helps me:
Maintain and improve this project with new features
Keep the project open source and free for everyone
Dedicate more time to addressing user requests and bug fixes
Explore new terminal integrations and command intelligence
Thank you for considering supporting my work.
Support
For issues, questions, or feature requests, visit: https://github.com/M-Pineapple/msty-admin-mcp
Available Tools
54 toolsask_frontierAsk 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.
Inputs: question (required), fresh, provider. Returns: result
bloom_check_handoffBloom check handoffARead-onlyIdempotent
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.
Inputs: model (required), task_category (required). Returns: result
bloom_evaluate_modelBloom 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.
Inputs: model (required), behavior (required), max_turns, total_evals, +1 more. Returns: result
bloom_get_historyBloom get historyARead-onlyIdempotent
Read persisted Bloom evaluation rows from ~/.msty-admin/bloom-history.json. Use bloom_evaluate_model to add rows. Read-only. Returns JSON evaluations.
Inputs: model, behavior. Returns: result
bloom_get_thresholdsBloom get thresholdsARead-onlyIdempotent
Read quality thresholds and handoff triggers for a task category. Use bloom_check_handoff to apply them to history. Read-only. Returns JSON thresholds.
Inputs: task_category (required). Returns: result
bloom_list_behaviorsBloom list behavioursARead-onlyIdempotent
List Bloom behaviours this server can evaluate. Use bloom_evaluate_model with one of these ids. Read-only. Returns JSON behaviors and count.
Inputs: no named parameters. Returns: result
bloom_validate_modelBloom validate modelARead-onlyIdempotent
Check whether a local Ollama model is reachable and suitable for Bloom. Use this before bloom_evaluate_model. Local HTTP. Returns JSON validation fields.
Inputs: model (required). Returns: result
chat_with_modelChat 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.
Inputs: model (required), messages (required), backend. Returns: result
compare_model_responsesCompare 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.
Inputs: models (required), prompt (required). Returns: result
escalate_if_neededEscalate 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.
Inputs: question (required), reason, provider. Returns: result
evaluate_response_qualityEvaluate response qualityARead-onlyIdempotent
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.
Inputs: prompt (required), response (required), category. Returns: result
export_tool_configExport tool configARead-onlyIdempotent
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.
Inputs: tool_name (required). Returns: result
export_workflow_packExport workflow packARead-onlyIdempotent
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.
Inputs: limit, include. Returns: result
generate_personaGenerate 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.
Inputs: name (required), model (required), system_prompt (required), confirm. Returns: result
get_calibration_historyGet calibration historyARead-onlyIdempotent
Read calibration scores from the sidecar metrics database under ~/.msty-admin. Use run_calibration_test to add rows. Read-only. Returns JSON history rows.
Inputs: limit, model_id. Returns: result
get_conversation_patternsGet conversation patternsARead-onlyIdempotent
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.
Inputs: model_id. Returns: result
get_hardware_profileGet hardware profileARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
get_insights_usageGet insights usageARead-onlyIdempotent
Read Studio insights usage for one model or all models. Same data as get_model_performance_metrics. Read-only. Returns JSON totals and models.
Inputs: model_id, timeframe. Returns: result
get_model_performance_metricsGet model performance metricsARead-onlyIdempotent
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.
Inputs: model_id, timeframe. Returns: result
get_model_providersGet model providersARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
get_msty_installationGet Msty installationARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
get_nexusGet NexusARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
get_schema_migrationsGet schema migrationsARead-onlyIdempotent
Show recent Drizzle schema migrations from the Studio database. Use get_msty_installation for the app version. Read-only. Returns JSON migrations.
Inputs: limit. Returns: result
get_statusGet statusARead-onlyIdempotent
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.
Inputs: scope. Returns: result
get_studio_entityGet Studio entityARead-onlyIdempotent
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.
Inputs: entity (required), entity_id (required). Returns: result
get_vibe_proxy_statusGet Vibe proxy statusARead-onlyIdempotent
Check whether the Vibe CLI proxy port is up. Use query_vibe_proxy to send a query. Local HTTP. Returns JSON status or unavailable.
Inputs: no named parameters. Returns: result
identify_handoff_triggersIdentify handoff triggersARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
import_studio_packImport 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.
Inputs: pack (required), confirm. Returns: result
import_tool_configImport 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.
Inputs: tool_data (required), confirm. Returns: result
install_modelInstall modelADestructive
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.
Inputs: model (required), confirm, service. Returns: result
list_agent_plansList agent plansARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_configured_toolsList configured Toolbox toolsARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
list_context_studioList Context StudioARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_crewsList crewsARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_knowledge_stacksList knowledge stacksARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_live_contextsList live contextsARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_modelsList modelsARead-onlyIdempotent
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.
Inputs: backend. Returns: result
list_personasList personasARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_promptsList promptsARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_shadow_personasList shadow personasARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_skillsList skillsARead-onlyIdempotent
List Skills Studio preferences and folders. Skills are imported as JSON packs, not SQLite inserts. Read-only. Returns JSON skills and folders.
Inputs: limit. Returns: result
list_studio_catalogueList Studio catalogueARead-onlyIdempotent
Return row counts for every known Studio entity type. Use a specific list_* tool for the rows themselves. Read-only. Returns JSON counts.
Inputs: no named parameters. Returns: result
list_turnstilesList turnstilesARead-onlyIdempotent
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.
Inputs: limit. Returns: result
list_workspacesList workspacesARead-onlyIdempotent
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.
Inputs: limit. Returns: result
optimise_knowledge_stacksOptimise knowledge stacksARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
query_local_ai_serviceQuery 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.
Inputs: endpoint (required), data, method. Returns: result
query_nexusQuery 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.
Inputs: data, path, method. Returns: result
query_vibe_proxyQuery 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.
Inputs: query (required). Returns: result
read_msty_databaseRead Studio databaseARead-onlyIdempotent
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.
Inputs: limit, query. Returns: result
recommend_modelRecommend modelARead-onlyIdempotent
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.
Inputs: use_case. Returns: result
run_calibration_testRun 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.
Inputs: category, model_id. Returns: result
set_model_settingsSet model settingsADestructive
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.
Inputs: base_model (required), variant_name (required), top_p, system, +3 more. Returns: result
suggest_persona_improvementsSuggest persona improvementsARead-onlyIdempotent
Suggest persona edits from live Studio personas. Does not write personas. Use generate_persona to create one. Read-only. Returns JSON suggestions.
Inputs: no named parameters. Returns: result
sync_claude_preferencesSync Claude preferencesARead-onlyIdempotent
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.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 54 tools
The descriptions actively cross-reference related tools, which helps separate many read-only list/get tools from model, calibration, and Bloom tools. However, with 54 tools there are several near-duplicates and overlapping boundaries, such as get_model_performance_metrics vs get_insights_usage and ask_frontier vs escalate_if_needed, plus multiple status/health tools that could be confused.
Most tools use a predictable snake_case verb_noun pattern (get_, list_, import_, export_, query_, bloom_, etc.), so the set is generally readable and scannable. Minor deviations include namespace-style bloom_ prefixes and mixed verbs like ask_frontier vs escalate_if_needed, but these do not break the overall convention.
At 54 tools, this is far beyond a well-scoped admin surface and exceeds the rubric's 50+ extreme-mismatch threshold. The server covers many adjacent domains—Studio entities, local inference, Vibe/Nexus gateways, calibration, Bloom, and frontier escalation—so the tool count feels sprawling rather than each tool earning its place.
Read coverage is broad across Studio entities, models, diagnostics, and evaluation history, and there are import/generate paths for some write workflows. But CRUD lifecycle coverage is uneven: many entity types can be listed or fetched but not updated or deleted, and several write operations are pack-only or gated, leaving notable admin gaps.
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
8 MCP servers, 104+ tools: memory, social, PDF, email, images, calendar, scheduler, files.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnterprise-grade MCP server for intelligent task management with 0-100 evaluation scoring, session-based workflow tracking, and real-time status monitoring for AI assistants.15 npm3MIT
- FlicenseCqualityDmaintenanceComprehensive MCP server for managing all IBM Cloud services, offering 180+ tools across 16 domains to enable AI assistants to fully manage IBM Cloud infrastructure.1002-
- AlicenseBqualityDmaintenanceComprehensive MCP server for Google Stitch with 36 tools covering design-to-code workflows, including screen generation, code extraction, design analysis, and project management.44357 npm5MIT
- AlicenseNot gradedqualityDmaintenanceUnified MCP server with 46 tools for AI expert consultations, memory service integration (semantic search, knowledge graphs), workflow automation, and code sandboxing.MIT