Savage in a Suit MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for the HTTP server (hosts set this, optional) | |
| SIAS_API_KEY | Yes | The site's admin API key | |
| SIAS_BASE_URL | Yes | The live site URL | |
| MCP_AUTH_TOKEN | No | Secret guarding the hosted URL (required for hosted mode, not needed for local mode) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_eventsA | List all events on the Savage in a Suit site, including unpublished ones. Returns full event records as JSON. |
| get_eventA | Fetch a single event by id or slug. Returns the full event record as JSON. |
| create_eventA | Create a new event on the site. Required: slug, title, startDate, city, image, description, type. The public site updates immediately. |
| update_eventA | Update an existing event by id or slug. Send only the fields to change. Set published to false to hide it from the public site. |
| delete_eventA | Permanently delete an event by id or slug. Prefer update_event with published: false if you only want to hide it. |
| list_membersA | List all member success stories on the site, including unpublished ones. Returns full member records as JSON. |
| create_memberC | Add a member success story. Required: slug, name, initials, role, city, image, feat, outcome, path, quote, category. Members are anonymized by default. |
| update_memberA | Update a member by id or slug. Send only the fields to change. Set published to false to hide the story from the public site. |
| delete_memberA | Permanently delete a member story by id or slug. Prefer update_member with published: false if you only want to hide it. |
| list_episodesA | List all podcast episodes on the site, newest first, including unpublished ones. Returns full episode records as JSON. |
| add_podcast_episodeB | Add a new podcast episode. Required: slug, number (unique), title, guest, date, art, spotifyUrl, appleUrl, blurb. |
| update_episodeA | Update an episode by id or slug. Send only the fields to change. |
| delete_episodeA | Permanently delete a podcast episode by id or slug. Prefer update_episode with published: false if you only want to hide it. |
| list_lettersA | List all Playbook letters on the site, newest first, including unpublished ones. Returns full letter records as JSON. |
| get_letterA | Fetch a single Playbook letter by id or slug. Returns the full letter record, including the markdown body, as JSON. |
| create_letterA | Publish a new Playbook letter. Required: slug, title, date, excerpt, body (markdown). The public archive at /letters updates immediately. |
| update_letterA | Update a Playbook letter by id or slug. Send only the fields to change. Set published to false to hide it from the public site. |
| delete_letterA | Permanently delete a Playbook letter by id or slug. Prefer update_letter with published: false if you only want to hide it. |
| list_testimonialsA | List all testimonials (featured career outcomes and short community reviews), including unpublished ones. Returns full records as JSON. |
| get_testimonialA | Fetch a single testimonial by id or slug. Returns the full record as JSON. |
| create_testimonialA | Add a testimonial. Required: slug, name, quote. For a featured career-outcome card set result and featured: true; for a short community review set rating (1-5). |
| update_testimonialA | Update a testimonial by id or slug. Send only the fields to change. Set published to false to hide it from the public site. |
| delete_testimonialA | Permanently delete a testimonial by id or slug. Prefer update_testimonial with published: false if you only want to hide it. |
| list_productsA | List the on-site display settings for shop products. Shopify stays the source of truth for inventory, price, and checkout; these rows only control how products appear on the site. |
| update_product_displayA | Update how a shop product appears on the site by its Shopify handle: visibility, featured flag, title and description overrides, sort order. Creates the override row if one does not exist yet. |
| get_site_contentA | Read all editable site copy keys and their JSON values (home stats, announcement banner, featured member, inquiry form URL, and similar). |
| update_site_contentA | Set the JSON value for one site content key. Read get_site_content first to see the existing keys and value shapes; send the full new value for the key. |
| list_pagesA | List every editable page of the site (home, method, standard, circle, savage-hour, founder, faq, winning, events, apparel, podcast, inquire) with its key and public path. |
| get_page_contentA | Fetch a page's current editable content plus its field schema, so you know the exact shape before updating. Use the key from list_pages, e.g. "page:home". |
| update_page_contentA | Update a page's copy or images. Call get_page_content first for the shape, then send ONLY the fields to change as a nested object; they are deep-merged over the current content. Example for page:home -> { "hero": { "headline": "New headline" } }. Image fields take a path or full URL. FAQ answers support inline links as label. |
| list_leadsA | Read the inquiry and newsletter leads captured by the public site, newest first. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Each tool is scoped to a distinct resource and action (e.g., events, episodes, letters, testimonials, members, products, site content, pages, leads). Even where similar patterns exist, the resource is clear from the name and description, so an agent can confidently select the right tool.
Tool names overwhelmingly follow a consistent snake_case verb_noun pattern (list_*, get_*, create_*, update_*, delete_*). Minor deviations like 'add_podcast_episode' instead of 'create_episode' and 'update_product_display' for a product-specific action prevent a perfect score.
With 31 tools, the set exceeds the 25+ threshold and feels heavy. While each tool is purposeful, many could be consolidated (e.g., generic resource handlers) without losing clarity, making the overall count more than necessary.
The toolkit covers full CRUD for events, letters, and testimonials, and provides sensible read/update operations for site content and pages. Minor gaps include missing direct getters for episodes and members (list returns full records) and a read-only leads surface, but these are workable.