Manifest Studio


Manifest Studio is the heart of ContextMesh: a fully visual, drag-and-drop environment for building MCP manifests without hand-coding JSON. It combines:

  • Canvas – your grid-based workspace

  • Block Palette – six block/node types

  • Properties Panel – edit each node’s settings

  • Live JSON Preview – real-time manifest output

  • Validation Terminal – one-click manifest checks


1. UI Layout

flowchart LR
  subgraph LeftSidebar [Node Palette]
    Palette[Block Palette]
  end
  subgraph CanvasArea [Canvas]
    Canvas[Visual Canvas]
    Zoom[+ –  ☐ 🔒]
  end
  subgraph BottomArea [Validation Terminal]
    Terminal[▶ Validation Log (collapsed)]
  end
  subgraph RightSidebar [Properties & JSON]
    Run[► Run Validation]
    Props[“Select a node…” Properties Panel]
    Preview[Live JSON Preview]
  end

  Palette --> Canvas
  Canvas --> BottomArea
  Canvas --> RightSidebar
  • Left Sidebar – drag any of six node types onto the canvas

  • Center Canvas – pan, zoom, snap-to-grid, arrange your manifest graph

  • Bottom Terminal – expand for timestamped validation logs

  • Right Sidebar – node properties editor, live JSON, and “Run Validation”


2. Canvas Overview

  1. Drag blocks from the palette onto the grid.

  2. Move and snap them into a tidy graph.

  3. Connect with edges to define data flow.

  4. Zoom or pan to navigate complex manifests.


3. Block Palette

Six core node types—color-coded by category:

flowchart LR
  subgraph Palette
    Meta([Manifest Metadata]):::meta
    Cap([Capabilities]):::cap
    Res([Resources Container]):::node
    Tool([Tools Container]):::node
    Prompt([Prompts Container]):::node
    Samp([Sampling Container]):::node
    Roots([Roots Container]):::node
    Trans([Transport]):::node
    Conn([Connector Edge]):::edge
  end

  classDef meta  fill:#8AE8FF,stroke:#005f8a;
  classDef cap   fill:#A3E8FF,stroke:#006f8a;
  classDef node  fill:#CFA3FF,stroke:#5c005f;
  classDef edge  fill:#FFCF8A,stroke:#8a5f00;
  • Manifest Metadata

  • Capabilities (toggle which containers appear)

  • Resources (file-like data definitions)

  • Tools (functions the model can call)

  • Prompts (template messages)

  • Sampling (LLM request settings)

  • Roots (workspace roots/URIs)

  • Transport (stdio, SSE, POST)

  • Connector Edge (directs data flow between nodes)


4. Node Types & Properties

Each node’s editable fields appear in the Properties Panel when selected.

4.1 Manifest Metadata

Property
Type
Required
Description

name

string

Unique server identifier

version

string

SemVer (e.g. “1.0.0”)

description

string

Brief human-readable summary

author

string

Author or organization name

4.2 Capabilities

Property
Type
Required
Description

resources

toggle

Enable the Resources container

tools

toggle

Enable the Tools container

prompts

toggle

Enable the Prompts container

sampling

toggle

Enable the Sampling container

roots

toggle

Enable the Roots container

  • Enabling a capability spawns its container node on the canvas.

4.3 Transport

Property
Type
Required
Description

type

dropdown

stdio

sseEndpoint

string

✘ (SSE)

Path for SSE GET (e.g. /sse)

postPath

string

✘ (POST)

POST endpoint (e.g. /messages)


5. Containers

When a capability is enabled, drag its container onto the canvas. Below are each container’s mandatory “properties” fields and how they serialize in JSON:

5.1 Resources Container

  • properties must include:

    • resources: array of

      • uri (string)

      • name (string)

"resources": [
  {
    "uri":  "file:///path/to/file.txt",
    "name": "File Description"
  }
]

5.2 Tools Container

  • properties must include:

    • tools: array of

      • name (string)

      • description (string)

      • inputSchema:

        • type: "object"

        • properties: { … }

"tools": [
  {
    "name": "calculate_sum",
    "description": "Add two numbers",
    "inputSchema": {
      "type": "object",
      "properties": {
        "a": { "type": "number" },
        "b": { "type": "number" }
      }
    }
  }
]

5.3 Prompts Container

  • properties must include:

    • prompts: array of

      • name (string)

      • description (string)

      • template (string)

"prompts": [
  {
    "name":        "GreetUser",
    "description": "Say hello",
    "template":    "Hello, {{username}}!"
  }
]

5.4 Sampling Container

  • properties must include:

    • sampling: object

      • modelPreferences (optional)

      • temperature (number)

      • maxTokens (integer)

"sampling": {
  "temperature": 0.7,
  "maxTokens":   200
}

5.5 Roots Container

  • properties must include:

    • roots: array of

      • uri (string)

      • name (string)

"roots": [
  {
    "uri":  "file:///home/user/project",
    "name": "Project Root"
  }
]

6. Connector Edge

Property
Type
Required
Description

from

node ID

Source node’s output port

to

node ID

Target node’s input port

  • Edges drive the JSON generator to nest definitions properly.


7. Properties Panel & Inline Validation

  • Select a node to reveal its form fields.

  • Required fields are marked with “*”.

  • Invalid inputs highlight red and display a tooltip.

  • JSON-schema fields (e.g. inputSchema) validate on the fly.


8. Live JSON Preview

As you build, the right-sidebar preview streams out a fully compliant MCP manifest:

{
  "serverInfo":   { … },
  "capabilities": { … },
  "transport":    { … },
  "resources":    [ … ],
  "tools":        [ … ],
  "prompts":      [ … ],
  "sampling":     { … },
  "roots":        [ … ]
}
  • Click Copy or Download to export manifest.json.

  • Highlighting follows your canvas selection for easy debugging.


9. Run Validation & Log

  • Run Validation executes a suite of rule-based checks:

    1. JSON syntax

    2. Metadata presence

    3. Unique IDs & names

    4. Each container’s required fields

    5. Edge rules & port matching

    6. No extraneous fields

  • Entries appear timestamped; failures in red.

  • Final tally: “X passed, Y failed.”

  • Collapse with the “–” button.


10. Quick-Start Example

  1. Add Manifest Metadata → set name, version.

  2. Enable Capabilities → drag Prompts + Sampling.

  3. Define a Prompt → enter name, template.

  4. Configure Sampling → choose model, temperature, maxTokens.

  5. Wire Prompt → Sampling via Connector Edge.

  6. Run Validation, fix any errors.

  7. Download your manifest.json or Publish.


With Manifest Studio, you never write raw JSON—just drag, drop, configure, connect, and export. 🎉

Last updated