Skip to main content
Glama
Discord MCP - Discord server management MCP for AI agents

Discord MCP - Discord server management MCP for AI agents

Save blueprint

save_blueprint

Save a blueprint to the local store so you can reuse it across servers with execute_build_plan or track configuration drift with diff_blueprint. Names must be unique.

Instructions

Save a blueprint to the local store for reuse: apply it to other servers with execute_build_plan or track drift with diff_blueprint. Names are unique.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "name": "<name>",
      "blueprint": "<blueprint>"
    },
    "name": "save_blueprint"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYes
blueprintYes
descriptionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changedv1.4.2
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / id
      Added value: +{
      +  "description": "Discord id from export_server_blueprint. Matches this exact item, so a new name renames it.",
      +  "pattern": "^\\d{17,20}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / permissions
      Added value: +{
      +  "description": "Extra permissions per role here, beyond who can see and post (private_to, read_only, posting_roles). Example: [{\"role\": \"Event Staff\", \"allow\": [\"mention_everyone\", \"embed_links\"]}]. A listed role's extras become exactly these; roles not listed keep theirs.",
      +  "items": {
      +    "properties": {
      +      "allow": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "deny": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "role": {
      +        "description": "Role name, or @everyone.",
      +        "maxLength": 100,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "role"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • changedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / posting_roles / description
      Previous value: -"With read_only: role names that may still post."New value: +"With read_only: role names that may still post and start threads."
    • addedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / private_to / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / private_to / description
      Previous value: -"Role names that can see this channel. Everyone else is denied view."New value: +"Role names that can see this channel; everyone else is denied view. [] leaves only admins. null makes it visible to everyone. Omit to follow the category."
    • removedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / private_to / items
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / properties / private_to / type
      Removed value: -"array"
    • addedInput schema / properties / blueprint / properties / categories / items / properties / id
      Added value: +{
      +  "description": "Discord id from export_server_blueprint. Matches this exact item, so a new name renames it.",
      +  "pattern": "^\\d{17,20}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / blueprint / properties / categories / items / properties / permissions
      Added value: +{
      +  "description": "Extra permissions per role here, beyond who can see and post (private_to, read_only, posting_roles). Example: [{\"role\": \"Event Staff\", \"allow\": [\"mention_everyone\", \"embed_links\"]}]. A listed role's extras become exactly these; roles not listed keep theirs.",
      +  "items": {
      +    "properties": {
      +      "allow": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "deny": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "role": {
      +        "description": "Role name, or @everyone.",
      +        "maxLength": 100,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "role"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • addedInput schema / properties / blueprint / properties / categories / items / properties / private_to / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / blueprint / properties / categories / items / properties / private_to / description
      Previous value: -"Role names that can see the whole category."New value: +"Role names that can see the whole category. [] leaves only admins. null makes it visible to everyone."
    • removedInput schema / properties / blueprint / properties / categories / items / properties / private_to / items
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / properties / blueprint / properties / categories / items / properties / private_to / type
      Removed value: -"array"
    • addedInput schema / properties / blueprint / properties / channels / items / properties / id
      Added value: +{
      +  "description": "Discord id from export_server_blueprint. Matches this exact item, so a new name renames it.",
      +  "pattern": "^\\d{17,20}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / blueprint / properties / channels / items / properties / permissions
      Added value: +{
      +  "description": "Extra permissions per role here, beyond who can see and post (private_to, read_only, posting_roles). Example: [{\"role\": \"Event Staff\", \"allow\": [\"mention_everyone\", \"embed_links\"]}]. A listed role's extras become exactly these; roles not listed keep theirs.",
      +  "items": {
      +    "properties": {
      +      "allow": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "deny": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "role": {
      +        "description": "Role name, or @everyone.",
      +        "maxLength": 100,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "role"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • changedInput schema / properties / blueprint / properties / channels / items / properties / posting_roles / description
      Previous value: -"With read_only: role names that may still post."New value: +"With read_only: role names that may still post and start threads."
    • addedInput schema / properties / blueprint / properties / channels / items / properties / private_to / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / blueprint / properties / channels / items / properties / private_to / description
      Previous value: -"Role names that can see this channel. Everyone else is denied view."New value: +"Role names that can see this channel; everyone else is denied view. [] leaves only admins. null makes it visible to everyone. Omit to follow the category."
    • removedInput schema / properties / blueprint / properties / channels / items / properties / private_to / items
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / properties / blueprint / properties / channels / items / properties / private_to / type
      Removed value: -"array"
    • addedInput schema / properties / blueprint / properties / roles / items / properties / color / anyOf
      Added value: +[
      +  {
      +    "pattern": "^#?[0-9a-fA-F]{6}$",
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / blueprint / properties / roles / items / properties / color / description
      Added value: +"null clears it."
    • removedInput schema / properties / blueprint / properties / roles / items / properties / color / pattern
      Removed value: -"^#?[0-9a-fA-F]{6}$"
    • removedInput schema / properties / blueprint / properties / roles / items / properties / color / type
      Removed value: -"string"
    • addedInput schema / properties / blueprint / properties / roles / items / properties / id
      Added value: +{
      +  "description": "Discord id from export_server_blueprint. Matches this exact item, so a new name renames it.",
      +  "pattern": "^\\d{17,20}$",
      +  "type": "string"
      +}
  2. Changed3 schema fields changedv1.4.0
    • changedInput schema / properties / blueprint / properties / channels / maxItems
      Previous value: -100New value: +500
    • addedInput schema / properties / blueprint / properties / roles / description
      Added value: +"Highest role first, the way the server settings list them. A build creates them in this order and that order is the hierarchy."
    • changedInput schema / properties / blueprint / properties / roles / maxItems
      Previous value: -50New value: +250
  3. Changed9 schema fields changedv1.3.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / blueprint / additionalProperties
      Removed value: -false
    • removedInput schema / properties / blueprint / properties / categories / items / additionalProperties
      Removed value: -false
    • removedInput schema / properties / blueprint / properties / categories / items / properties / channels / items / additionalProperties
      Removed value: -false
    • removedInput schema / properties / blueprint / properties / channels / items / $ref
      Removed value: -"#/properties/blueprint/properties/categories/items/properties/channels/items"
    • addedInput schema / properties / blueprint / properties / channels / items / properties
      Added value: +{
      +  "name": {
      +    "maxLength": 100,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "nsfw": {
      +    "type": "boolean"
      +  },
      +  "posting_roles": {
      +    "description": "With read_only: role names that may still post.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "private_to": {
      +    "description": "Role names that can see this channel. Everyone else is denied view.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "read_only": {
      +    "description": "Deny sending for everyone; for rules and announcements.",
      +    "type": "boolean"
      +  },
      +  "slowmode_seconds": {
      +    "maximum": 21600,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "topic": {
      +    "maxLength": 1024,
      +    "type": "string"
      +  },
      +  "type": {
      +    "description": "Default text.",
      +    "enum": [
      +      "text",
      +      "voice",
      +      "forum",
      +      "stage",
      +      "announcement"
      +    ],
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / blueprint / properties / channels / items / required
      Added value: +[
      +  "name"
      +]
    • addedInput schema / properties / blueprint / properties / channels / items / type
      Added value: +"object"
    • removedInput schema / properties / blueprint / properties / roles / items / additionalProperties
      Removed value: -false
  4. First observedv1.0.2

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already say readOnlyHint=false and destructiveHint=false, so the mutation profile is known. The description adds that storage is local and that names are unique, but "names are unique" is ambiguous for a write tool — it doesn't say whether a duplicate name errors out or overwrites an existing blueprint, which is the key risk an agent needs to know before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, with the reuse path and the uniqueness constraint following in order of importance. No filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a deep nested object schema and no output schema, the description should say what happens on a name collision and what the caller gets back (saved name/id). The nested schema covers the blueprint body well, but the top-level save semantics are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema coverage is 0%, so the description carries the burden for the three parameters, and it only touches `name` indirectly via "Names are unique." However, the nested blueprint schema is very heavily self-documented (roles ordering, private_to semantics, permissions merging, id-based renaming), so the residual ambiguity is mainly the `name` vs `blueprint.name` distinction and the unused `description` field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Save a blueprint to the local store") plus the scope of the store (local, for reuse). It names two downstream siblings (execute_build_plan, diff_blueprint) so the agent can place it in the workflow without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit next-step context: use the saved blueprint with execute_build_plan to apply it elsewhere, or diff_blueprint to track drift. It does not clarify how this differs from export_server_blueprint (which appears to produce a blueprint too) or when saving is preferable to building directly, so the when-not guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools