Skip to main content
Glama

Create skill

well_create_skill

Save one skill in this workspace, without executing it. A reference or action skill takes its name, full body and skill_kind. A layout skill takes its name, skill_kind layout and source_board_id, and saves the blocks of that board with no figure. A layout skill name that is already in use is refused, and so is a demo workspace. Reference and layout skills stay private; public action skills require approval to publish. Read existing saved skills with well_query_records on skills before creating a duplicate.

Input Schema

NameRequiredDescriptionDefault
bodyNoThe full body of a reference or action skill. A layout skill reads its body from the board: send none.
nameYes
skill_kindYesThe kind of skill to save: reference, action or layout.
visibilityNo
descriptionNo
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
source_board_idNoThe board whose layout a layout skill saves. Send it for a layout skill, and for no other kind.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

NameRequiredDescriptionDefault
codeNo
nameNo
errorNo
successYes
skill_idNo
reply_linesNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
near_candidatesNo
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.
near_candidates_truncatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / body / description
      Added value: +"The full body of a reference or action skill. A layout skill reads its body from the board: send none."
    • changedInput schema / properties / skill_kind / description
      Previous value: -"The saved skill's kind: reference or action."New value: +"The kind of skill to save: reference, action or layout."
    • changedInput schema / properties / skill_kind / enum
      Previous value: -[
      -  "reference",
      -  "action"
      -]New value: +[
      +  "reference",
      +  "action",
      +  "layout"
      +]
    • addedInput schema / properties / source_board_id
      Added value: +{
      +  "description": "The board whose layout a layout skill saves. Send it for a layout skill, and for no other kind.",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "name",
      -  "body",
      -  "skill_kind"
      -]New value: +[
      +  "name",
      +  "skill_kind"
      +]
  2. Changed4 schema fields changed
    • addedOutput schema / properties / code
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / near_candidates
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "company_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "company_id",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / near_candidates_truncated
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / reply_lines
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a non-readOnly, non-destructive, closed-world write, so the description usefully adds what annotations cannot: name-collision refusal, demo-workspace refusal, layout skills sourcing their body from a board, and the visibility/approval model (reference and layout stay private, public action skills need approval). These are genuine behavioral facts beyond the structured fields, though nothing is said about authorization or idempotency behavior (the latter is left entirely to the schema).

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

Conciseness4/5

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

Front-loaded with the core action and the 'no execution' caveat, then proceeds kind-by-kind in a logical order. Six sentences is on the longer side, but each one carries distinct constraints (inputs per kind, refusals, visibility/approval, duplicate check) rather than restating the name or annotations.

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

Completeness4/5

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

For a 10-parameter mutation with an output schema (so return values need not be described), the definition covers the branching input requirements, refusal cases, privacy/approval model, and duplicate-avoidance workflow. The remaining gap is that workspace targeting behavior (workspace_id / workspace_scope / cross-workspace writes) is left to the schema rather than the description.

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

Parameters4/5

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

With 70% schema coverage across 10 params, the description adds real decision logic not in the schema: which parameter combinations apply per skill_kind (name+body+skill_kind vs. name+skill_kind+source_board_id), and what visibility means in practice for each kind. It does not explain workspace_id, conversation_id, idempotency_key, or workspace_scope, but those are well documented in the schema itself.

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?

The description states a specific verb and resource — 'Save one skill in this workspace' — and immediately adds the crucial scope qualifier 'without executing it', which separates it from any invocation/execution path. It then distinguishes the three skill kinds (reference, action, layout) and their distinct inputs, so an agent can tell it apart from well_update_skill, well_get_skill, and well_search_skill.

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?

It gives an explicit precondition routing rule — read existing skills via well_query_records on skills before creating a duplicate — plus two refusal conditions (name already in use, demo workspace). It stops short of naming the obvious sibling alternatives (well_update_skill for modifications, well_search_skill for lookup), so context is clear but exclusions are incomplete.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources