Skip to main content
Glama

Msty Admin MCP v6.2.2

Licence: MIT Python Stars M-Pineapple/msty-admin-mcp MCP server

Unofficial community project. Not affiliated with, or endorsed by, Msty. Msty is a trademark of its owner.

WARNING

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.

  1. Recommend. Your AI reads your hardware and suggests a model that fits, preferring one you already use if it still fits.

  2. Set up. It installs that model in Msty's Local AI once you confirm.

  3. Test. It runs test prompts, compares models on the same question, and can run Bloom behaviour checks.

  4. Tune. It makes a tuned copy of the model with your chosen temperature, length limit and instructions. Your original model is left alone.

  5. Configure Studio. It writes personas and prompts into Studio when you allow it, and saves tools and skills as import files.

  6. Work locally. You chat with your local model in Msty as usual.

  7. 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 --> W

Your 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 chat

For 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/ (mode 0600, directory 0700). import_tool_config and the tools, toolsets and skills keys of import_studio_pack never write the Studio database. Import that pack in Toolbox. Configs with command, args or env are flagged as running a program on your machine.

  • Personas and prompts insert into Studio SQLite only when confirm=true, the operator env MSTY_ALLOW_STUDIO_WRITES=1 and 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_service is allow-listed (tags, version, show, chat). Pull and create go through install_model and set_model_settings, which also need confirm=true.

  • Calibration and Bloom history live under ~/.msty-admin/, not in Studio.

  • Frontier needs CURSOR_API_KEY for Cursor, XAI_API_KEY for Grok, or ANTHROPIC_API_KEY for 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:8000

From 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/ -v

This 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 model

Architecture

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 DB

The 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

  1. 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.

  2. 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.

  3. 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.

  1. Create a toolset that contains only this Frontier server. Do not put GitHub, Brave, Trello, or the full admin server in that toolset.

  2. 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.

  3. Quit Msty and open it again after any toolbox or environment change.

  4. Ask a question the local model cannot already answer. Success is one ask_frontier card, 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_frontier and the text under it came from Cursor.

  • cursor-agent status can say "not logged in" while ask mode still works with CURSOR_API_KEY. The frontier process passes that variable as --api-key. A browser cursor-agent login in your terminal is not always visible to the process Msty starts.

  • Several ask_frontier calls 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 (mode 0600). Delete that file to start a fresh Cursor chat.

  • identify_handoff_triggers scores past speed and latency. escalate_if_needed is the tool that actually sends the question.

  • Grok and Claude sessions are stored in ~/.msty-admin/frontier-grok-session.json and frontier-claude-session.json (mode 0600).


Tools summary (54 in total)

Phase 1: Foundational (5)

  • get_msty_installation: app, version, DB path, ports

  • read_msty_database: stats / tables / read-only SQL

    • In 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 tools

  • get_model_providers: services and Studio providers (keys redacted)

  • get_status: MCP, install and local service health. scope is all, server, install or services

Phase 2: Configuration (5)

  • export_tool_config: export a tool by name/id

  • sync_claude_preferences: Claude to Msty delta report

  • generate_persona: persona JSON pack. SQLite insert needs confirm=true, MSTY_ALLOW_STUDIO_WRITES=1 and a detected Studio 2.4 to 2.9.x, so it is refused on Windows and Linux

  • import_tool_config: JSON pack for Toolbox. Never writes the Studio database

  • import_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. backend defaults to all

  • query_local_ai_service (allow-listed)

  • chat_with_model: Local AI, MLX or llama.cpp. backend defaults to local_ai

  • get_hardware_profile, recommend_model

  • install_model, set_model_settings

  • get_vibe_proxy_status, query_vibe_proxy

Phase 4: Intelligence (5)

  • get_model_performance_metrics: from Studio insightsLanguageModelUsage

  • get_conversation_patterns

  • compare_model_responses

  • optimise_knowledge_stacks: live Next Gen / draft / compose status

  • suggest_persona_improvements

Phase 5: Calibration (5)

  • run_calibration_test, evaluate_response_quality

  • identify_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_history

  • bloom_list_behaviors, bloom_get_thresholds, bloom_validate_model

Phase 7: Studio 2.9 Inventory (15)

  • list_studio_catalogue, list_workspaces, list_personas

  • list_shadow_personas, list_crews, list_knowledge_stacks

  • list_turnstiles, list_skills, list_live_contexts, list_prompts

  • list_context_studio, list_agent_plans

  • get_studio_entity (plural keys such as personas, plus singular aliases such as persona), 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-frontier or python -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/ -v

v6 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 &lt; 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:

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 tools
ask_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 handoffA
Read-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 historyA
Read-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 thresholdsA
Read-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 behavioursA
Read-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 modelA
Read-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 qualityA
Read-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 configA
Read-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 packA
Read-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 historyA
Read-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 patternsA
Read-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 profileA
Read-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 usageA
Read-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 metricsA
Read-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 providersA
Read-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 installationA
Read-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 NexusA
Read-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 migrationsA
Read-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 statusA
Read-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 entityA
Read-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 statusA
Read-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 triggersA
Read-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 modelA
Destructive

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 plansA
Read-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 toolsA
Read-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 StudioA
Read-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 crewsA
Read-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 stacksA
Read-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 contextsA
Read-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 modelsA
Read-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 personasA
Read-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 promptsA
Read-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 personasA
Read-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 skillsA
Read-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 catalogueA
Read-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 turnstilesA
Read-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 workspacesA
Read-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 stacksA
Read-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 databaseA
Read-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 modelA
Read-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 settingsA
Destructive

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 improvementsA
Read-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 preferencesA
Read-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

    A3.6/5.0

    Scored across 54 tools

    Disambiguation3/5

    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.

    Naming Consistency4/5

    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.

    Tool Count1/5

    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.

    Completeness3/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers