MCP server for marketing messaging grounding and Prefab asset generation
MsgStack has well-structured tool definitions with comprehensive parameter descriptions and clear naming conventions. All 7 tools follow verb_noun patterns (search_, set_, get_, list_, compare_, get_). Descriptions are detailed (100-300+ chars) and explain WHEN to use each tool. However, output schemas are not explicitly documented in the source code, responses are inferred from return type hints and docstrings rather than formal JSON Schema declarations. Parameter schemas are present but lack explicit enum constraints for multi-value fields (assertion_types, channels, audiences, retrieval_mode). Error handling is minimal, no recovery guidance or actionable error messages visible. The server uses fastmcp framework with HTTP transport, which is current.
Compare two or more specs side by side. By default only includes entries with status APPROVED or LOCKED. Use include_unapproved=True to include DRAFT and IN_REVIEW entries. Useful for comparing different departments or product lines.
Get the full approval/status-change audit trail for a specific assertion. Returns the complete history of status changes, reviews, and approvals for the given entry, ordered newest-first. Mirrors the review-trail data shape.
Get the current grounding context for this session. Returns which spec is active, which audiences are in scope, and which chunks have been used so far.
Retrieve full content of a spec for research. By default only returns entries with status APPROVED or LOCKED. Use include_unapproved=True to include DRAFT and IN_REVIEW entries. OUTDATED entries are always excluded. Use this tool to understand the positioning, target audience, and approved assertions. CRITICAL: Do NOT use the data returned here to manually write a one-pager or artifact for the user. Instead, use 'generate_artifact' or 'build_ui_artifact'.
List all available specs with their IDs and summaries. Call this FIRST whenever the user mentions a brand, product, company, or policy domain — before calling any generate or search tool. Use the returned domain_id (UUID) for all subsequent tool calls. IMPORTANT: The 'summary' in the response is a 2–3 sentence overview ONLY. It does NOT contain the actual approved assertions or proof points. After identifying the domain_id: - To GENERATE an output → call generate_artifact(skill_id, domain_id) - To READ full grounding content → call get_spec(domain_id) Never write content yourself using only this tool's output.
Output schemas not formally documented. Return types are inferred from Python type hints and docstrings, not explicit JSON Schema. LLMs cannot reliably predict response structure for downstream tool chaining.
Multi-value parameters lack enum constraints. Fields like 'assertion_types', 'channels', 'audiences', and 'retrieval_mode' accept free-form strings without formal enums. LLMs will hallucinate invalid values.
Error handling lacks recovery guidance. set_active_spec returns a dict with 'error' key but provides no actionable next steps. Errors should guide the LLM toward resolution (e.g., 'Try list_specs() to see available options').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Search approved spec graph entries for grounding content. By default only returns entries with status APPROVED or LOCKED. Use include_unapproved=True to include DRAFT and IN_REVIEW entries. OUTDATED entries are always excluded. Provide a natural language query and optional filters to retrieve relevant assertions from your organization's specs. Use this before generating or verifying content to ensure it aligns with approved truth.
Pin a spec as the active grounding context for the session. Subsequent searches will default to this domain unless overridden. Call this first when you know which spec to use.
No pagination support visible. search_assertions and list_specs lack limit/offset or cursor parameters. Large result sets could exhaust context windows without explicit pagination.
Parameter 'retrieval_mode' accepts free-form string with only description guidance ('hybrid', 'vector', 'graph', 'keyword'). Should be declared as enum with explicit allowed values.