Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SSH_HOSTNoRemote Linux hostname/IP for SSH.
SSH_PASSNoRemote Linux password for SSH.
SSH_USERNoRemote Linux username for SSH.
GITHUB_TOKENNoGitHub API access token.
SASSYMCP_DEVNoEnable live reload (dev mode). Set to 1 to enable.0
SASSYMCP_HOMENoOverride the per-user state directory (default ~/.sassymcp). Required when running multiple instances.~/.sassymcp
SASSYMCP_REPONoOverride the auto-detected repo root (dev tool only).
SASSYMCP_PANELNoLaunch the Control Panel at boot when set to 1.0
SASSYMCP_GROUPSNoComma-separated list of tool groups to load (e.g., 'core,android').
SASSYMCP_LOAD_ALLNoLoad every tool group. Set to 1 to enable.0
SASSYMCP_AUTH_TOKENNoBearer token for HTTP authentication.
SASSYMCP_TUNNEL_NAMENoName of the Cloudflare tunnel to run.
SASSYMCP_ALLOWED_HOSTSNoComma-separated list of allowed hosts for tunnel access (e.g., 'mcp.example.com,localhost,127.0.0.1').
SASSYMCP_LICENSE_BYPASSNoLegacy dev escape hatch (accepted and ignored).
SASSYMCP_NO_UPDATE_CHECKNoDisable the startup update check. Set to 1 to disable.0

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
sassy_state_setB

Persist any value for any tool across sessions.

sassy_state_getC

Retrieve persistent state for a tool. Returns JSON-encoded value.

sassy_state_clearB

Clear state for a specific tool or all tools.

sassy_observability_metricsB

Return real-time server metrics and performance data.

sassy_observability_healthB

Simple health check for monitoring tools and load balancers.

sassy_observability_tool_statsC

Full usage tracker stats + pruning suggestions.

sassy_get_configA

Get full SassyMCP configuration and system info.

Returns: config settings, system info (OS, Python, memory, disk), uptime, loaded modules, and tool usage stats. DC get_config equivalent.

sassy_set_configB

Set a runtime config value.

Supported keys: defaultShell, fileReadLineLimit, fileWriteLineLimit, allowedDirectories, blockedCommands. value: JSON-encoded value (e.g. '"powershell"', '1000', '[]')

sassy_permissionA

View and control the permission engine (sassymcp.policy).

Single front door for the four-mode safety system that gates the shell and file tools. The future Control Panel UI writes the same config keys this tool does.

action: status (default) show effective mode, how it was derived, the sandbox roots, and the active allow/ask/deny rules. set_mode set permission.mode. mode= one of: strict — block destructive patterns everywhere confirm — destructive patterns need a confirm token sandbox — relaxed gating INSIDE the sandbox roots; anything resolving outside is refused bypass — allow all except protected paths "" — clear the override; derive from the legacy interceptor.destructiveAction setting add_root add path= to permission.sandboxRoots (the jail) remove_root remove path= from permission.sandboxRoots add_rule append rule= (JSON: {"action","tool","path","command"}) to permission.rules; first match wins, evaluated before the mode default clear_rules remove all rules

sassy_panelA

Control the SassyMCP Control Panel — the loopback web UI for the permission engine, settings, event log, and classifiers.

action: status (default) — running state + URL (with token) if up start — launch the panel and enable it at future startups stop — shut the panel down and disable auto-start url — print the tokenized URL (does not start it)

The panel binds 127.0.0.1 only and requires the per-install token (stored owner-only in ~/.sassymcp/control_panel.token). Open the printed URL in a browser on this machine.

sassy_recent_tool_callsA

Get recent tool call history from audit log.

max_results: how many to return (1-1000) tool_name: filter to specific tool (optional) since_minutes: only calls within last N minutes (0=all)

sassy_context_estimateA

Estimate current context window usage from MCP tool definitions.

Shows: total estimated tokens, % of 200K window, heaviest tools. Use this to understand why your context is running low.

sassy_tool_usageA

Show tool usage analytics: invocation counts, trends, top tools.

Tracks which tools you actually use to inform smart loading. Data persists across sessions in ~/.sassymcp/tool_usage.json.

sassy_tool_groupsA

List available tool groups and their load status.

Shows which groups are loaded, their tool counts, and descriptions. Use sassy_tool_group_toggle to enable/disable groups.

sassy_self_checkA

Proprioceptive self-check: reconcile the declared module manifest against the live tool registry and surface any module that FAILED to import — the silent drop _load_modules()'s try/except otherwise hides.

Answers "am I whole?" with a real readout instead of phantom limbs. A tool can be legitimately absent for three reasons, all reported separately so none is mistaken for a regression:

  • dormant — in an on-demand group (always_load=False) not yet toggled on or usage-boosted. Absent BY DESIGN; appears after sassy_tool_group_toggle or a usage boost.

  • pruned — low usage score dropped it from the default load (see _tool_loader.get_pruned_tools).

  • unsupported — module import raises on THIS platform, but it was never in the default load, so the failure is non-fatal.

The one real regression is:

  • BROKEN — an expected-loaded module whose import raises, so its tools never register and the loss is silent.

Every BROKEN module is logged at ERROR (server log / audit substrate) so the amputation is loud, not silent. verdict='whole' == every expected module imports cleanly.

sassy_tool_catalogA

Catalog every registered tool: name, one-line purpose, group.

Client-agnostic capability map for ANY MCP wrapper — enumerate what this server can actually do without loading each tool's schema. Derived live from the registry, so it never drifts from reality the way hand-written capability prose does (the drift that makes absent lazy-loaded tools look like missing ones).

group: filter to one tool group (see sassy_tool_groups). Empty = all. query: case-insensitive substring match on tool name or purpose.

sassy_tool_group_toggleA

Enable or disable a tool group. Emits tools/list_changed notification.

NOTE: clients vary. MCP clients that handle tools/list_changed (Claude Code, Cursor, etc.) refresh automatically; clients that don't (Claude Desktop today) require a manual server restart.

group: core, android, system, github_quick, github_full, v020, persona enable: True to load, False to unload

sassy_minify_testA

Test the GitHub response minifier on sample JSON.

Paste a GitHub API response and see how much it shrinks. Shows before/after token estimates.

sassy_hooks_listA

List all available operational hooks.

Hooks are expert playbooks that teach the AI HOW to approach a task. When activated, the AI gets pre-loaded domain expertise — the right "lens" for the job. Use sassy_hooks_activate to load one.

sassy_hooks_activateA

Activate an operational hook. Returns the full expert playbook.

The playbook contains step-by-step instructions for HOW to approach the task — which tools to use, in what order, what to look for, and what NOT to do. Follow it.

Use sassy_hooks_list to see available hooks.

sassy_hooks_deactivateA

Deactivate a hook or all hooks.

hook_name: specific hook to deactivate, or empty to clear all.

sassy_hooks_suggestA

Suggest hooks based on what the user is trying to do.

Pass the user's request text. Returns matching hooks ranked by relevance. The AI should call this when it's unsure which hook to use, or proactively when the user's request matches a known domain.

sassy_edit_blockA

Surgical file edit: find old_text and replace with new_text.

  • Exact match preferred; fuzzy fallback with diff reporting

  • Fails if multiple exact matches found (provide more context)

  • Preserves file encoding and line endings

  • Returns a preview of the change with surrounding context

  • Refuses edits on protected paths

  • Snapshots existing content to DELETE/ before applying

sassy_edit_multiA

Apply multiple edits to a file in one call.

edits format (JSON string): [{"old": "text to find", "new": "replacement"}, ...]

Edits are applied in order. Each must have exactly one match. Refuses edits on protected paths and snapshots existing content to DELETE/ before applying.

sassy_env_getA

Get an environment variable value. Returns error if not set.

sassy_env_setA

Set an environment variable for the current SassyMCP process.

Persists for the lifetime of the server. Does NOT modify system env. For permanent changes, use the registry or system settings.

sassy_env_listA

List environment variables. Optional filter by name substring. Sensitive values (tokens, keys, secrets) are masked.

sassy_toastA

Show a desktop notification. duration: short or long.

Useful for alerting when a long-running task completes. Routed at the head: Windows toast (BurntToast -> .NET -> msg.exe), macOS osascript notification, Linux notify-send.

sassy_zipA

Create a zip archive from a file or directory.

source: path to file or directory to zip output: output zip path (defaults to source + .zip) compression: deflated (default), stored (no compression), bzip2, lzma

sassy_unzipA

Extract a zip archive.

archive: path to .zip file destination: extract to this directory (defaults to archive parent) password: for encrypted zips

sassy_tarC

Create a tar archive. compress: gz, bz2, xz, or none.

sassy_untarC

Extract a tar/tar.gz/tar.bz2/tar.xz archive.

sassy_diffB

Compare two files and return a unified diff.

context_lines: number of surrounding lines to show (default 3). Returns the diff text plus stats (added, removed, changed lines).

sassy_httpA

Make an HTTP request. Lightweight alternative to web_inspector for quick API calls.

method: GET, HEAD, OPTIONS, POST, PUT, PATCH, DELETE headers: JSON object of headers, e.g. {"Authorization": "Bearer xxx"} body: request body (string or JSON) allow_mutating: required True for state-changing verbs (POST, PUT, PATCH, DELETE). The MCP tool surface is reachable by an LLM that may be partially adversarial; gating mutating verbs behind an explicit flag stops an "innocent fetch" prompt from being steered into a DELETE against an internal service.

sassy_http_pingA

Quick health check on multiple URLs. Returns status code and response time for each.

urls: comma-separated list of URLs to check.

sassy_update_checkA

Check for a newer SassyMCP release (apt-update equivalent).

Caches the result for 5 minutes; pass force=True to bypass the cache.

sassy_update_listB

List downloadable assets for a release (apt-list-upgradable equivalent).

tag defaults to the latest release.

sassy_update_changelogA

Return the release notes body for a tag (defaults to latest).

sassy_update_applyA

Download an asset to staging. Returns the path + a run command.

Does NOT execute the installer — the user runs the returned command when ready. Disabled in packaged/frozen builds so marketplace installs remain a fixed graded version; upgrade by installing a new release artifact instead.

sassy_memory_rememberA

Store a memory that persists across sessions.

key: unique identifier (use naming convention: task_state, pattern, blocker, decision) value: the memory content (what happened, what was learned, current state) tags: comma-separated (e.g. "task-active,tls,security") priority: critical | high | normal | low project: project name (e.g. "sassymcp", "sassy-browser")

sassy_memory_recallC

Recall a specific memory by key.

sassy_memory_searchA

Search memories by text, tags, project, or priority.

query: free text search across keys and values tags: comma-separated tag filter (e.g. "pattern,tls") project: filter by project name priority: filter by priority level

sassy_memory_forgetA

Delete a memory. Use when information is no longer relevant.

sassy_memory_contextA

Load full context for session startup. Returns critical memories, active tasks, blockers, recent milestones, and learned patterns.

Call this at the START of every session. This is how you know what's been happening and what needs to continue.

project: optional filter to focus on a specific project

sassy_memory_logA

Log a milestone event. Use for significant completions, decisions, or changes.

event: what happened (e.g. "deployed v1.0", "fixed TLS cert chain", "merged PR #42") project: which project tags: comma-separated (e.g. "deployment,milestone")

sassy_memory_milestonesB

View recent milestones, optionally filtered by project.

sassy_memory_handoffA

Write a session handoff — saves state to BOTH memory and crosslink.

The next session calls sassy_memory_context and sassy_crosslink_recv to pick up exactly where you left off.

task: what you were working on status: in-progress | blocked | needs-review | paused | completed completed: comma-separated list of completed items next_steps: comma-separated ordered list of what to do next blockers: comma-separated list of blockers files_touched: comma-separated list of files modified project: project name context_notes: critical context the next session needs

sassy_memory_statsB

Memory system stats: total memories, priorities, projects, milestones.

sassy_setup_wizardA

First-run setup wizard. Generates ~/.sassymcp/persona.md from your answers.

Call with your profile to personalize SassyMCP. All fields optional.

role: developer | sysadmin | security | devops | data | designer | manager | other expertise_level: junior | mid | senior | principal | staff specializations: Comma-separated areas (e.g. "web security, cloud infra, mobile") languages: Comma-separated (e.g. "Python, Rust, TypeScript, Go") frameworks: Comma-separated (e.g. "React, FastAPI, Cloudflare Workers") systems: Newline-separated "hostname — OS — role" entries projects: Newline-separated "name — status — description" entries communication_style: terse | balanced | verbose security_posture: standard | hardened | paranoid mcp_clients: Which AI tools connect (e.g. "Claude Desktop, Cursor, Grok Desktop") has_android: True if the user has an Android phone to control (installs adb + scrcpy) has_linux: True if the user works with a Linux server or WSL (installs plink) notes: Anything else the AI should know about how you work

sassy_setup_statusA

Check setup status: is persona configured? Auth tokens? Config state?

sassy_setup_generate_tokenA

Generate a new auth token for MCP client authentication.

Creates a secure token and saves it to ~/.sassymcp/tokens.json. Use this token in SASSYMCP_AUTH_TOKEN env var or in client config.

client_id: identifier for the client (e.g. "claude-desktop", "grok", "cursor") scopes: comma-separated permissions (read, write, admin)

sassy_setup_githubB

Guide GitHub token setup. Opens browser, validates, saves.

action: check | open_browser | save_token | skip token: the GitHub PAT to save (only for save_token action)

sassy_setup_sshA

Guide SSH/Linux remote setup. Checks plink, saves creds, tests connection.

action: check | save | test | skip host: SSH hostname or IP (for save action) user: SSH username (for save action) password: SSH password (optional; fed via stdin at test time, not on the argv list) key: path to a .ppk private key (preferred over password) session: saved PuTTY session name (carries host+user+key)

Authentication priority at test time: session > key > Pageant > password-via-stdin. Pass at least ONE auth source on save, otherwise the call returns status=incomplete (no false 'saved' on empty creds).

sassy_setup_check_toolsA

Scan for external tools and report availability. Tesseract is required.

Checks: nmap, Tesseract OCR (REQUIRED), adb, scrcpy, plink (PuTTY), Chrome/Chromium. Also checks Python packages: pytesseract, playwright. Use sassy_setup_tools for winget-based auto-install.

sassy_setup_licenseA

Manage your SassyMCP supporter license against LemonSqueezy.

All tool groups are unlocked for everyone — no key required. A license is an optional supporter purchase; activating one records your tier label (shown in the banner, control panel, cockpit).

action: status | activate | deactivate | validate key: LemonSqueezy license key (format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), required for activate.

activate: calls LS to register this machine as an instance, then mints a local HMAC payload so offline use works. validate: forces an immediate LS re-check (normally weekly). deactivate: calls LS to free this machine's seat and removes the local file.

sassy_shellA

Execute a shell command in the host's native shell.

shell: Windows -> powershell (default), cmd, wsl. macOS/Linux -> zsh/bash (default is the login shell), sh. Leave empty to use the host default. Automatically normalizes syntax (e.g. && to ; for PowerShell); POSIX shells run the command verbatim.

timeout_seconds > 120: auto-promoted to a background session and returns a JSON handle ({"auto_detached": true, "session_name": ...}). Poll with sassy_session_read; stop with sassy_session_stop. This is because synchronous waits past the MCP client's ~240s response wall wedge the connection. For known long-running work, prefer calling sassy_session_start directly with a memorable name.

allow_pattern: opt-in escape hatch for power users. When set to a specific pattern label (e.g. 'truncate-by-redirect') OR to '*', a regex-pattern match with that label is allowed to execute instead of being blocked. The bypass is recorded as a 'pattern_bypass' audit entry. Keyword matches (rm/del/remove-item) are NEVER affected by this flag — only regex patterns can be opted out, and only one pattern at a time.

Tiered destructive-action handling: when interceptor.destructiveAction = "confirm" (config), MEDIUM- and HIGH-tier pattern matches return a confirmation_required JSON payload with a single-use token instead of hard-blocking. Call sassy_shell_confirm(token) (HIGH tier also requires a typed phrase) to actually run the command. LOW-tier matches always run after a log entry. The default action remains "block".

sassy_shell_confirmA

Execute a sassy_shell command previously returned as confirmation_required.

Tokens are single-use, expire after 60s, and are bound to the exact command + shell + cwd that produced them. HIGH-tier tokens also require confirm_phrase to match the phrase shown in the original confirmation_required response — replays against a different command are rejected.

sassy_persona_styleB

Get expert-mode operating parameters. Directives for execution priority, communication style, autonomy level, and precision standards.

sassy_persona_decisionsA

Get the decision framework. Defines when to execute immediately vs state approach vs confirm vs hard-stop.

sassy_persona_practicesA

Get engineering standards. Security defaults, code quality rules, architecture patterns, platform-specific guidelines, MCP tool patterns.

sassy_persona_observabilityA

Get the cross-system observability guide. What introspection tools are available, what they return, and the recommended first-call sequence.

sassy_persona_contextA

Get current user context from ~/.sassymcp/persona.md. Returns user's role, systems, projects, and preferences.

sassy_persona_capabilitiesA

Get the SassyMCP capabilities guide. How to use dynamic vision, phone interaction, pause/resume, sensitive context detection, and setup wizard. This is the instruction manual for SassyMCP's advanced features.

sassy_persona_fullA

Load the complete operating bundle: style + decisions + practices + observability + capabilities + user context. Call this on first connection.

sassy_audit_logC

Read recent audit log entries.

sassy_audit_searchC

Search audit log for a keyword.

sassy_audit_false_positivesA

Show recent shell-interceptor pattern matches (blocks + bypasses).

Surfaces the noisy-pattern events you'd otherwise have to grep for. Each row: timestamp | event | pattern | command (truncated).

Args: count: max rows to return (newest last). include_bypasses: if False, show only blocks (commands that actually got refused). True also includes pattern_bypass entries — useful for auditing what the allow_pattern flag has been used to let through.

sassy_audit_clearA

Rotate the audit log to a timestamped archive.

The log is NEVER unlinked — always renamed to audit.cleared..log so forensic history is preserved. Pass confirm='YES' to proceed.

sassy_screen_infoA

Get display configuration: all monitors with resolution, position, DPI scaling, and which is primary. Essential for multi-monitor setups.

sassy_desktop_stateA

Get desktop state: open windows and positions. Lean output. Coordinates are absolute across all monitors. Windows: pywinauto. macOS: System Events (needs Accessibility permission).

sassy_clickA

Click at absolute screen coordinates (works across multiple monitors). Use sassy_screen_info to find monitor positions first.

sassy_type_textA

Type text into a field. Always clears field first with ctrl-a + backspace. If target_x/target_y provided, clicks the field first.

sassy_hotkeyB

Press keyboard shortcut. Keys separated by +, e.g. ctrl+c.

sassy_screenshotB

Take screenshot. Optional region as x,y,w,h. monitor=-1 for all, 0 for primary, 1+ for others.

sassy_ghq_pushA

Push files atomically (create or update). THE daily-driver tool.

files: JSON array of {"path": "...", "content": "..."} objects. Uses Git Data API — no SHA bugs, no ETag nonsense.

sassy_ghq_getC

Get file contents + SHA from a repo.

sassy_ghq_issueC

Create an issue. labels: comma-separated.

sassy_ghq_issuesC

List issues.

sassy_ghq_prC

Create a pull request.

sassy_ghq_protectB

Protect a branch (no force push, no delete, enforce on admins).

sassy_setup_toolsA

Manage external tool dependencies (tesseract, adb, nmap, plink, scrcpy, cloudflared).

action: check | install | install_required | add_to_path tool_name: which tool to install (only for action=install)

check -- report all tools: found, path, required flag install -- winget-install a specific tool by name install_required -- winget-install any missing required tools (always: tesseract) add_to_path -- re-run PATH bootstrap (after placing tools in tools/ dir)

tesseract is always required -- OCR/vision tools need it unconditionally. adb + scrcpy are needed for Android tools. plink for SSH/Linux tools.

sassy_session_startA

Start a persistent terminal session.

name: unique session identifier (e.g. 'build', 'dev-server') shell: Windows -> powershell/cmd/wsl; macOS/Linux -> bash/zsh/sh. Leave empty for the host's native shell. command: optional initial command to run immediately

sassy_session_sendA

Send input to a running session.

Like typing in a terminal. Newline is appended automatically. Input is scanned by the delete interceptor — delete keywords are refused here (use sassy_shell or sassy_safe_delete instead, where targets are safely staged to DELETE/).

sassy_session_readA

Read new output from a session without sending input.

Returns only text that arrived since the last read.

sassy_session_listA

List all active terminal sessions.

sassy_session_stopC

Stop and clean up a terminal session.

sassy_session_stop_allA

Stop all active terminal sessions.

sassy_safe_deleteA

Move a file or directory to a DELETE staging folder for review.

Instead of permanent deletion, items are moved to a DELETE folder in the same parent directory. This minimises data loss from AI hallucinations or accidental deletions.

sassy_read_fileA

Read file contents with line-based pagination.

offset >= 0 : start from that line (0-based) offset < 0 : read last N lines (tail) length : max lines to return (ignored when offset < 0)

sassy_read_multipleA

Read multiple files at once. paths = JSON array of file paths.

sassy_write_fileA

Write or append to a file. mode: rewrite | append.

encoding: any Python codec name (utf-8, utf-16, ascii, latin-1, ...). line_endings: 'preserve' (default — write content verbatim), 'lf' (normalize all CRLF/CR to LF before writing), 'crlf' (normalize all to CRLF — useful for Windows .bat / .ps1 files generated from a model that emits LF).

Rewrite mode on an existing file first snapshots the prior contents into the adjacent DELETE/ staging folder so destructive overwrites can always be undone. Protected paths (SassyMCP source tree, ~/.sassymcp) are refused.

Bypasses the shell-keyword interceptor entirely — content with words like 'format' or 'rm -rf' as data inside scripts is fine. Path validation runs _check_write_path (allowedDirectories + sensitive-read denylist + protected roots) so an LLM cannot write into ~/.ssh, ~/.aws, the SassyMCP source tree, etc. even when allowedDirectories is empty.

sassy_list_dirA

List directory contents. [FILE]/[DIR] prefixes. depth controls recursion.

sassy_search_filesB

Search for files by name or content.

search_type: files | content file_pattern: glob filter e.g. '.py', '.js' context_lines: lines of context around content matches

sassy_moveA

Move or rename a file/directory.

Blocks moves from/to protected paths and refuses to overwrite an existing destination without an explicit sassy_safe_delete first.

sassy_copyA

Copy a file or directory tree.

Refuses protected src/dst and refuses to silently overwrite an existing destination (use sassy_safe_delete on the destination first if you really need to replace it).

sassy_file_infoA

Get detailed file/directory metadata.

Includes: size, timestamps, line count (text), sheet info (Excel).

sassy_mkdirA

Create a directory (and any missing parents).

Prompts

Interactive templates invoked by user choice

NameDescription
pr-reviewRun a SassyMCP PR review on a GitHub pull request. Calls the combo tool to fetch metadata + diff + comments + check runs in one shot, then summarises the change, flags concerns, and states a merge recommendation.
phone-statusSnapshot the current state of the connected Android device — foreground app, battery, WiFi, notifications, low-res screenshot, and parsed UI accessibility tree — in one combo call.
resumePick up where the prior session left off. Loads MadameClaude memory context AND any cross-platform task-handoff messages, then executes the next_steps from the handoff immediately.
codebase-grepSearch the codebase for a pattern with surrounding context — ranked top-5 files with 5 lines of context around each hit. Replaces the search-then-read-N-files dance for 'where is X used'.
brain-statusReport SassyMCP's current state — license tier, loaded tool groups, context window cost, top tools by usage score, recent audit activity, and pruning candidates.
setup-sassyWalk the first-run setup wizard for SassyMCP — persona, GitHub token, optional Linux/Android, optional Pro license activation.
discoverOrient in the SassyMCP toolset before acting: confirm the server is whole and which runtime it is, list what it can actually do, and match the task to a domain playbook. Run at the start of any task on an unfamiliar or just-connected server.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sassyconsultingllc/SassyMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server