Back to skills
SkillHub ClubAnalyze Data & AIFull StackBackendData / AI

mcp-server-creator

Create valid, production-quality Stigmer McpServer YAML files conforming to the agentic.stigmer.ai/v1 API. Use this skill when users want to: (1) create a new McpServer resource for connecting agents to external tools (GitHub, Slack, databases, custom APIs), (2) configure MCP server transport (stdio subprocess or HTTP endpoint), (3) declare environment variable requirements and credential contracts, (4) set default tool gates and approval policies for human-in-the-loop safety, (5) understand how agents reference McpServers via mcp_server_usages. Triggers on requests mentioning MCP server, McpServer, tool integration, or connecting an agent to an external service.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
3
Hot score
80
Updated
March 20, 2026
Overall rating
C1.4
Composite score
1.4
Best-practice grade
C62.8

Install command

npx @skill-hub/cli install stigmer-stigmer-mcp-server-creator

Repository

stigmer/stigmer

Skill path: seedpack/skills/mcp-server-creator

Create valid, production-quality Stigmer McpServer YAML files conforming to the agentic.stigmer.ai/v1 API. Use this skill when users want to: (1) create a new McpServer resource for connecting agents to external tools (GitHub, Slack, databases, custom APIs), (2) configure MCP server transport (stdio subprocess or HTTP endpoint), (3) declare environment variable requirements and credential contracts, (4) set default tool gates and approval policies for human-in-the-loop safety, (5) understand how agents reference McpServers via mcp_server_usages. Triggers on requests mentioning MCP server, McpServer, tool integration, or connecting an agent to an external service.

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Backend, Data / AI, Integration.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: stigmer.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install mcp-server-creator into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/stigmer/stigmer before adding mcp-server-creator to shared team environments
  • Use mcp-server-creator for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: mcp-server-creator
description: >
  Create valid, production-quality Stigmer McpServer YAML files conforming to the
  agentic.stigmer.ai/v1 API. Use this skill when users want to: (1) create a new
  McpServer resource for connecting agents to external tools (GitHub, Slack, databases,
  custom APIs), (2) configure MCP server transport (stdio subprocess or HTTP endpoint),
  (3) declare environment variable requirements and credential contracts, (4) set default
  tool gates and approval policies for human-in-the-loop safety, (5) understand how agents
  reference McpServers via mcp_server_usages. Triggers on requests mentioning MCP server,
  McpServer, tool integration, or connecting an agent to an external service.
---

# MCP Server Creator

Create valid `agentic.stigmer.ai/v1` McpServer YAML resources. Follow the six-step
workflow below in order for every McpServer creation request.

## Step 1 — Understand the MCP Server

Before writing any YAML, gather these details from the user:

1. **External system** — What does the MCP server connect to? (GitHub, Slack, a database, a custom API, etc.)
2. **Server type** — Is it a CLI tool started as a subprocess (`stdio`) or a remote HTTP service (`http`)?
   - If the user mentions `npx`, `python -m`, `uvx`, a Go binary, or any CLI command → `stdio`
   - If the user mentions a URL, hosted service, or API gateway → `http`
   - When in doubt, default to `stdio` — the vast majority of MCP servers use it
3. **Credentials** — What environment variables does the server need? Which are secrets?
4. **Tools** — What tools should be enabled by default? Which tools are destructive and need approval?
5. **Ownership** — What organization owns this server? Should it be public (marketplace) or private?

If the user has already provided sufficient context, proceed directly. Do not ask questions
the user has already answered.

## Step 2 — Choose the Server Type

Exactly one of `stdio` or `http` must be specified. This is a proto `oneof` with `required` validation — omitting both or specifying both fails.

**Use `stdio`** (most common) for subprocess-based servers:
```yaml
spec:
  stdio:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
```

**Use `http`** for remote/managed services:
```yaml
spec:
  http:
    url: "https://mcp.example.com/v1"
    headers:
      Authorization: "Bearer ${API_TOKEN}"
    timeout_seconds: 45
```

For field details, see [references/schema.md](references/schema.md).

## Step 3 — Configure Environment Variables

Declare every environment variable in `env_spec.data`. For each variable:
- Set `is_secret: true` for API tokens, passwords, private keys
- Set `is_secret: false` for regions, org names, URLs, feature flags
- Write a `description` that specifies required permissions/format
- **Never pre-fill `value` for secrets** — values are provided at runtime via AgentInstance

```yaml
spec:
  env_spec:
    data:
      GITHUB_TOKEN:
        description: "GitHub personal access token with repo and read:org scopes"
        is_secret: true
      GITHUB_OWNER:
        description: "Default GitHub organization or username"
        is_secret: false
```

For HTTP servers, ensure every `${VAR_NAME}` in headers/query_params has a matching `env_spec` entry.

## Step 4 — Set Default Tools and Approval Policies

### Default Enabled Tools
Use `default_enabled_tools` to gate which tools are available by default. Empty = all tools enabled. Agents can only restrict further, never expand beyond this list.

### Default Tool Approvals
Use `default_tool_approvals` for destructive or sensitive operations. Each entry needs:
- `tool_name` — exact name from the server's `tools/list` (case-sensitive)
- `message` — approval prompt with `{{args.field}}` placeholders for context

**Tool names must be verified, not guessed.** If the user doesn't know exact tool names, recommend running `stigmer discover mcp-server <slug>` after applying, then updating the YAML with discovered names.

For the approval policy chain and message template syntax, see [references/agent-integration.md](references/agent-integration.md).

## Step 5 — Validate the YAML

Before presenting the final YAML, verify every rule in [references/validation.md](references/validation.md). Critical checks:

1. `apiVersion` is exactly `agentic.stigmer.ai/v1`
2. `kind` is exactly `McpServer` (PascalCase)
3. `metadata.name` is present
4. Exactly one of `spec.stdio` or `spec.http` is specified
5. `spec.stdio.command` is present (for stdio servers)
6. `spec.http.url` is a valid HTTP/HTTPS URL (for http servers)
7. No `status` fields are set (system-managed)
8. No secret values pre-filled in `env_spec`
9. Slug format: `^[a-z][a-z0-9-]*$`, 1–63 chars (if specified)
10. `${VAR_NAME}` syntax in HTTP headers/params (not `{{}}`)
11. `{{args.field}}` syntax in approval messages (not `${}`)

## Step 6 — Explain Agent Integration

After delivering the McpServer YAML, explain how agents reference it:

```yaml
# In an Agent spec
spec:
  mcp_server_usages:
    - mcp_server_ref:
        kind: mcp_server
        slug: <mcpserver-slug>    # matches the McpServer's metadata.slug
      enabled_tools:              # optional — subset of default_enabled_tools
        - tool_one
        - tool_two
      tool_approval_overrides:    # optional — per-agent customization
        - tool_name: dangerous_tool
          requires_approval: true
          message: "Custom approval message"
```

Key points to convey:
- The McpServer contains no secrets — credentials come from AgentInstance's environment binding
- Agents reference by `org/slug` — slug is auto-generated from `metadata.name` if not set
- The three-layer approval chain: McpServer defaults → Agent overrides → Execution bypass
- After applying, run `stigmer discover mcp-server <slug>` to populate tool metadata
- In references, use `kind: mcp_server` (snake_case), not `kind: McpServer` (PascalCase)

For complete agent integration details, see [references/agent-integration.md](references/agent-integration.md).

## Reference Files

| File | When to Read |
|------|-------------|
| [references/schema.md](references/schema.md) | Need field-level details for any McpServer spec field |
| [references/examples.md](references/examples.md) | Need complete YAML examples (minimal → marketplace-ready) |
| [references/validation.md](references/validation.md) | Need the full validation checklist before presenting YAML |
| [references/agent-integration.md](references/agent-integration.md) | Need to explain how agents reference McpServers, tool approval chain, or sub-agent access |


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### references/schema.md

```markdown
# McpServer YAML Schema Reference

Complete field reference for the `agentic.stigmer.ai/v1` McpServer resource.
Proto source: `ai/stigmer/agentic/mcpserver/v1/spec.proto`.

## Top-Level Structure

```yaml
apiVersion: agentic.stigmer.ai/v1    # required, exact string
kind: McpServer                       # required, exact string (PascalCase)
metadata:                             # required
  name: <string>                      # required — human-readable name
  slug: <string>                      # optional — auto-generated from name
  org: <string>                       # recommended — owning organization
  visibility: <enum>                  # optional — visibility_private (default) or visibility_public
  labels: {key: value}                # optional — filtering metadata
  annotations: {key: value}           # optional — non-filtering metadata
  tags: [string]                      # optional — categorization
spec:                                 # required
  description: <string>              # recommended — what the server does
  icon_url: <string>                 # optional — image URL for UI
  tags: [string]                     # optional — marketplace categorization
  stdio: <StdioServerConfig>         # exactly one of stdio or http (required)
  http: <HttpServerConfig>           # exactly one of stdio or http (required)
  default_enabled_tools: [string]    # optional — tool gate
  env_spec: <EnvironmentSpec>        # optional — credential contract
  default_tool_approvals: [ToolApprovalPolicy]  # optional — approval policies
# status: {} — system-managed, never set by users
```

## Metadata Fields

| Field | Required | Description |
|---|---|---|
| `name` | Yes | Human-readable name (e.g., "GitHub MCP Server") |
| `slug` | No | URL-friendly ID, unique per org. Format: `^[a-z][a-z0-9-]*$`, 1–63 chars. Auto-generated from name if omitted. This is how agents reference the server. |
| `org` | Recommended | Owning organization. Auto-resolved from context if omitted. |
| `visibility` | No | `visibility_private` (default) or `visibility_public` (marketplace). |
| `labels` | No | Key-value pairs for filtering (e.g., `category: vcs`). |
| `annotations` | No | Key-value pairs not used for filtering (e.g., `docs-url: "https://..."`. |
| `tags` | No | String array for categorization and search. |

## StdioServerConfig

Subprocess-based server communicating over stdin/stdout.

| Field | Required | Description |
|---|---|---|
| `command` | Yes | Executable to run: binary name on PATH or absolute path. Examples: `npx`, `python`, `node`, `./mcp-server` |
| `args` | No | Arguments passed to the command. Order matters. |
| `working_dir` | No | Working directory for the process. Use absolute paths. |

Credential injection: environment variables from AgentInstance are passed directly to the subprocess.

## HttpServerConfig

Remote server communicating over HTTP POST + Server-Sent Events.

| Field | Required | Description |
|---|---|---|
| `url` | Yes | Base URL of the MCP endpoint. Must be valid HTTP/HTTPS URL. |
| `headers` | No | HTTP headers for every request. Values support `${VAR_NAME}` env var substitution. |
| `query_params` | No | Query parameters appended to URL. Values support `${VAR_NAME}` substitution. |
| `timeout_seconds` | No | Request timeout (0–300). Default: 30. Set higher for long-running operations. |

**Environment variable interpolation** in headers/params uses `${VAR_NAME}` syntax — resolved at runtime from AgentInstance's environment binding.

## EnvironmentSpec (`env_spec`)

Declares required environment variables — schema only, not values.

```yaml
env_spec:
  data:
    VAR_NAME:
      value: ""                  # leave empty for secrets
      is_secret: true/false      # true = encrypted at rest, redacted in logs
      description: "What this variable is for and required format/permissions"
```

| EnvironmentValue Field | Description |
|---|---|
| `value` | Leave empty in McpServer spec. Values provided at runtime via AgentInstance. |
| `is_secret` | `true`: encrypted, redacted. `false`: plaintext, visible in audit logs. |
| `description` | Document required permissions, format, scopes. Shown in UI during AgentInstance setup. |

## ToolApprovalPolicy (`default_tool_approvals`)

Defines which tools require human approval by default for all agents using this server.

| Field | Required | Description |
|---|---|---|
| `tool_name` | Yes | Exact tool name from `tools/list` (case-sensitive, min 1 char). |
| `message` | No | Approval prompt. Supports `{{args.field}}` and `{{tool_name}}` placeholders. If empty: auto-generates "Execute tool: {tool_name}". |

### Message Template Syntax

| Placeholder | Source | Behavior |
|---|---|---|
| `{{args.field_name}}` | Tool call arguments | Replaced with value; missing args become `<unknown>` |
| `{{tool_name}}` | Tool name | Always available |

Guidelines: be specific, use action verbs, include highest-risk arguments, keep under 100 characters.

## Default Enabled Tools (`default_enabled_tools`)

Platform-level tool gate — the default set of tools available when agents reference this server.

- Empty list → all tools enabled by default
- Non-empty list → only listed tools are available; agents can restrict further but never expand
- Tool names must match exactly what the server reports via `tools/list`

## Placeholder Syntax Summary

| Syntax | Context | Resolved By | Example |
|---|---|---|---|
| `${VAR_NAME}` | HTTP headers, query_params | Agent runner from environment | `"Bearer ${API_TOKEN}"` |
| `{{args.field}}` | Approval messages | Approval engine from tool args | `"Delete: {{args.repo}}"` |

**Never mix these two syntaxes** — `${VAR_NAME}` is for environment variable injection, `{{args.field}}` is for approval message rendering.

```

### references/agent-integration.md

```markdown
# Agent Integration Reference

How agents reference McpServers, the tool approval policy chain, sub-agent access, and the full runtime resolution flow.

## McpServerUsage in Agent Spec

Agents declare MCP server usage via `spec.mcp_server_usages`:

```yaml
# In Agent spec
spec:
  mcp_server_usages:
    - mcp_server_ref:
        kind: mcp_server           # snake_case (NOT McpServer)
        slug: github               # matches McpServer metadata.slug
      enabled_tools:               # optional — subset of default_enabled_tools
        - search_code
        - get_file_contents
        - create_pull_request
      tool_approval_overrides:     # optional — per-agent customization
        - tool_name: delete_repository
          requires_approval: true
          message: "Delete repository: {{args.repo_name}}"
```

### McpServerUsage Fields

| Field | Required | Description |
|---|---|---|
| `mcp_server_ref` | Yes | Reference with `kind: mcp_server` and `slug`. Add `org` for cross-org references. |
| `enabled_tools` | No | Tools to enable. Empty = use McpServer's `default_enabled_tools` (or all if not set). Cannot expand beyond McpServer's gate. |
| `tool_approval_overrides` | No | Per-agent approval policy customization (see below). |

The `mcp_server_ref.slug` must be **unique** within a single agent's `mcp_server_usages`.

### Reference Format

```yaml
# Relative reference (recommended) — org resolved from agent's metadata.org
mcp_server_ref:
  kind: mcp_server
  slug: github

# Absolute reference — for cross-org or marketplace servers
mcp_server_ref:
  org: stigmer
  kind: mcp_server
  slug: github
```

Canonical format: `org/slug` (e.g., `stigmer/github`, `acme-corp/internal-db`).

## Three-Layer Approval Policy Chain

Approval policies resolve in order of increasing priority:

```
McpServer.default_tool_approvals          ← base layer (all agents)
        │
        ▼ overrides
Agent.McpServerUsage.tool_approval_overrides  ← per-agent layer
        │
        ▼ overrides
AgentExecution.auto_approve_all           ← runtime bypass
```

| Priority | Source | Scope |
|---|---|---|
| 1 (lowest) | `McpServer.default_tool_approvals` | All agents using this server |
| 2 | `Agent.tool_approval_overrides` | Single agent |
| 3 (highest) | `AgentExecution.auto_approve_all` | Single execution (runtime) |

### ToolApprovalOverride Fields

| Field | Required | Description |
|---|---|---|
| `tool_name` | Yes | Exact tool name (case-sensitive) |
| `requires_approval` | Yes | `true` = requires approval; `false` = no approval (overrides McpServer default) |
| `message` | No | Custom approval prompt. If empty: inherits McpServer message or auto-generates. |

### Override Examples

**Trusted agent — disable McpServer defaults:**
```yaml
tool_approval_overrides:
  - tool_name: delete_repository
    requires_approval: false
  - tool_name: force_push
    requires_approval: false
```

**Stricter agent — add approvals McpServer doesn't require:**
```yaml
tool_approval_overrides:
  - tool_name: send_email
    requires_approval: true
    message: "Send email to {{args.recipient}}: {{args.subject}}"
  - tool_name: create_ticket
    requires_approval: true
    message: "Create support ticket for customer"
```

## Sub-Agent MCP Access

Sub-agents can only access MCP servers the parent has in `mcp_server_usages`. Access is granted via `mcp_access`:

```yaml
sub_agents:
  - name: code-reviewer
    description: "Reviews code changes"
    instructions: "You review code changes for quality..."
    mcp_access:
      - mcp_server: github         # slug from parent's mcp_server_usages
        enabled_tools:             # subset of parent's enabled_tools
          - search_code
          - get_file
```

| McpAccess Field | Description |
|---|---|
| `mcp_server` | Slug matching `mcp_server_ref.slug` from parent's usages |
| `enabled_tools` | Tools for this sub-agent (subset of parent's). Empty = all parent tools. |

## Runtime Resolution Flow

1. **Agent** declares `mcp_server_usages` (references only — no secrets)
2. **AgentInstance** binds Agent to Environment (provides actual credential values)
3. **Agent Runner** resolves each McpServer ref, retrieves secrets from Environment, starts MCP server process
4. Tools become available during AgentExecution

The McpServer YAML is **portable and secret-free**. Different AgentInstances bind the same Agent to different environments (staging vs production).

## Post-Apply Workflow

```bash
# 1. Apply the McpServer
stigmer apply -f mcpserver.yaml

# 2. Discover tools (connects locally, pushes metadata to platform)
stigmer discover mcp-server <slug>

# 3. Verify discovered tools
stigmer get mcp-server <slug> --output yaml
# Check status.discovered_capabilities.tools[*].name

# 4. Use discovered names in default_enabled_tools, default_tool_approvals, and agent enabled_tools
```

Discovery runs on the developer's machine — credentials never leave the local environment. Only tool metadata (names, descriptions, schemas) is sent to the platform.

```

### references/validation.md

```markdown
# Validation Checklist

Run through this checklist before presenting any McpServer YAML. Every item must pass.

## Required Fields

- [ ] `apiVersion` is exactly `agentic.stigmer.ai/v1`
- [ ] `kind` is exactly `McpServer` (PascalCase — not `mcpserver`, `Mcpserver`, `mcp_server`, `MCP_SERVER`)
- [ ] `metadata.name` is present
- [ ] Exactly one of `spec.stdio` or `spec.http` is specified (proto `oneof` with `required` — omitting both or both present fails)
- [ ] `spec.description` is present and explains the server's purpose

## Stdio Servers

- [ ] `spec.stdio.command` is present
- [ ] Command is a real executable (`npx`, `python`, `node`, `./binary`, etc.)
- [ ] `working_dir` uses absolute path if specified
- [ ] All required env vars declared in `env_spec`

## HTTP Servers

- [ ] `spec.http.url` is a valid HTTP or HTTPS URL
- [ ] Every `${VAR_NAME}` in `headers` and `query_params` has a matching `env_spec.data` entry
- [ ] `timeout_seconds` is in range 0–300 if specified

## Metadata

- [ ] `slug` (if specified) matches `^[a-z][a-z0-9-]*$`, 1–63 characters
- [ ] `org` is set (auto-resolved from context if omitted, but recommended to be explicit)
- [ ] `visibility` is intentional — only `visibility_public` for marketplace servers

## Environment Variables

- [ ] Every env var has `is_secret` correctly classified
- [ ] Secret values are NOT pre-filled (no `value` field for secrets)
- [ ] Descriptions specify required permissions/format/scopes
- [ ] Non-secret shared defaults may optionally have `value` pre-filled

## Tool Names

- [ ] All names in `default_enabled_tools` are verified (not guessed)
- [ ] All `tool_name` in `default_tool_approvals` match exactly (case-sensitive)
- [ ] If tool names are unverified, include a note to run `stigmer discover mcp-server <slug>` after applying

## Placeholder Syntax

- [ ] HTTP headers/params use `${VAR_NAME}` (not `{{}}`)
- [ ] Approval messages use `{{args.field}}` (not `${}`)
- [ ] These two syntaxes are never mixed up

## Status

- [ ] No `status` fields set (system-managed — omit entirely or leave as `{}`)

## Common Pitfalls

### Wrong `kind` casing
```yaml
# WRONG                    # CORRECT
kind: mcpserver            kind: McpServer
kind: Mcpserver            kind: McpServer
kind: mcp_server           kind: McpServer
```

Note: In Agent `mcp_server_ref`, use `kind: mcp_server` (snake_case). In the McpServer resource itself, use `kind: McpServer` (PascalCase). Both are correct for their respective contexts.

### Wrong `apiVersion`
```yaml
# WRONG                         # CORRECT
apiVersion: stigmer.ai/v1       apiVersion: agentic.stigmer.ai/v1
apiVersion: agentic/v1          apiVersion: agentic.stigmer.ai/v1
apiVersion: v1                  apiVersion: agentic.stigmer.ai/v1
```

### Mixing placeholder syntaxes
```yaml
# WRONG — ${} in approval message
message: "Delete ${args.repo}"

# WRONG — {{}} in HTTP header
Authorization: "Bearer {{API_TOKEN}}"

# CORRECT
Authorization: "Bearer ${API_TOKEN}"     # env var in header
message: "Delete repository: {{args.repo}}"  # tool arg in approval
```

### Secret values in spec
```yaml
# WRONG
GITHUB_TOKEN:
  value: "ghp_realtoken123"    # Never put real secrets here
  is_secret: true

# CORRECT
GITHUB_TOKEN:
  description: "GitHub PAT with repo scope"
  is_secret: true
```

### Unverified tool names (silent failure)
Tool names in `default_tool_approvals` that don't match the server's `tools/list` are **silently ignored** — no error, no warning, no approval enforced. Always verify names via discovery or documentation.

### Slug format errors
```yaml
# WRONG
slug: GitHub             # uppercase
slug: github_mcp         # underscores
slug: 123-github         # starts with digit

# CORRECT
slug: github
slug: github-mcp
slug: my-db-server-v2
```

```

### references/examples.md

```markdown
# McpServer YAML Examples

Complete examples from minimal to marketplace-ready. All examples use valid field values.

## Minimal Stdio Server

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: github
spec:
  description: "GitHub MCP server for repository operations"
  stdio:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
```

## Stdio Server with Environment Variables

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: github
  tags:
    - git
    - vcs
spec:
  description: "GitHub MCP server for repository operations, code search, and PR management"
  icon_url: "https://github.githubassets.com/favicons/favicon.svg"
  stdio:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
  env_spec:
    data:
      GITHUB_TOKEN:
        description: "GitHub personal access token with repo and read:org scopes"
        is_secret: true
      GITHUB_OWNER:
        description: "Default GitHub organization or username (e.g., acme-corp)"
        is_secret: false
```

## Stdio Server with Tool Gates and Approval Policies

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: github
  org: acme-corp
  tags:
    - git
    - vcs
    - code-review
spec:
  description: "GitHub MCP server for repository operations and code management"
  icon_url: "https://github.githubassets.com/favicons/favicon.svg"
  stdio:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
  default_enabled_tools:
    - search_code
    - get_file_contents
    - list_issues
    - create_issue
    - create_pull_request
    - get_pull_request
    - merge_pull_request
  default_tool_approvals:
    - tool_name: merge_pull_request
      message: "Merge PR #{{args.pull_number}} in {{args.repo}}"
    - tool_name: delete_repository
      message: "Delete repository: {{args.repo}}"
    - tool_name: force_push
      message: "Force push to {{args.branch}} on {{args.repo}}"
  env_spec:
    data:
      GITHUB_TOKEN:
        description: "GitHub personal access token with repo, read:org, and admin:repo_hook scopes"
        is_secret: true
```

## Database Server with Restricted Defaults

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: postgres
  labels:
    category: database
  tags:
    - database
    - sql
    - postgresql
spec:
  description: "PostgreSQL MCP server for database queries and schema inspection"
  stdio:
    command: python
    args: ["-m", "mcp_server_postgres"]
  default_enabled_tools:
    - execute_query
    - list_tables
    - describe_table
    - list_schemas
  env_spec:
    data:
      POSTGRES_URL:
        description: "PostgreSQL connection URL (postgres://user:pass@host/db)"
        is_secret: true
```

## Python Module Server

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: sqlite
spec:
  description: "SQLite MCP server for local database queries"
  stdio:
    command: python
    args: ["-m", "mcp_server_sqlite", "--db-path", "/data/db.sqlite"]
```

## HTTP Server with Header Authentication

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: web-search
  tags:
    - search
    - web
spec:
  description: "Web search MCP service for full-text search and page retrieval"
  http:
    url: "https://mcp.example.com/search/v1"
    headers:
      Authorization: "Bearer ${SEARCH_API_TOKEN}"
      X-API-Version: "2024-01"
    timeout_seconds: 45
  env_spec:
    data:
      SEARCH_API_TOKEN:
        description: "API token for the web search service"
        is_secret: true
```

## HTTP Server with Multi-Tenant Routing

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: internal-knowledge-base
  org: acme-corp
  visibility: visibility_private
  labels:
    category: knowledge
spec:
  description: "Internal knowledge base MCP server for policy and procedure lookup"
  http:
    url: "https://api.acme-corp.com/mcp/kb"
    headers:
      Authorization: "Bearer ${KB_SERVICE_TOKEN}"
      X-Tenant-ID: "${TENANT_ID}"
    query_params:
      version: "v2"
    timeout_seconds: 30
  default_tool_approvals:
    - tool_name: create_article
      message: "Create knowledge base article: {{args.title}}"
    - tool_name: delete_article
      message: "Delete article '{{args.title}}' (id: {{args.article_id}})"
  env_spec:
    data:
      KB_SERVICE_TOKEN:
        description: "Service token for the knowledge base API"
        is_secret: true
      TENANT_ID:
        description: "Tenant identifier for request routing (e.g., acme-corp)"
        is_secret: false
```

## Public Marketplace Server (Full-Featured)

```yaml
apiVersion: agentic.stigmer.ai/v1
kind: McpServer
metadata:
  name: Slack
  org: stigmer
  visibility: visibility_public
  labels:
    category: communication
    tier: production
  annotations:
    docs-url: "https://github.com/modelcontextprotocol/servers/tree/main/src/slack"
    support-url: "https://github.com/stigmer/stigmer/issues"
  tags:
    - slack
    - messaging
    - communication
spec:
  description: "Slack MCP server for channel messaging, search, and workspace management"
  icon_url: "https://a.slack-edge.com/80588/marketing/img/icons/icon_slack_hash_colored.png"
  tags:
    - slack
    - messaging
  stdio:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-slack"]
  default_enabled_tools:
    - list_channels
    - post_message
    - reply_to_thread
    - get_channel_history
    - search_messages
    - add_reaction
  default_tool_approvals:
    - tool_name: post_message
      message: "Post to #{{args.channel_name}}: {{args.text}}"
    - tool_name: reply_to_thread
      message: "Reply in #{{args.channel_name}} thread: {{args.text}}"
    - tool_name: invite_user_to_channel
      message: "Invite {{args.user_id}} to #{{args.channel_name}}"
    - tool_name: archive_channel
      message: "Archive channel #{{args.channel_name}}"
  env_spec:
    data:
      SLACK_BOT_TOKEN:
        description: "Slack Bot User OAuth Token (xoxb-...) with channels:read, chat:write, search:read scopes"
        is_secret: true
      SLACK_TEAM_ID:
        description: "Slack workspace team ID (e.g., T01234567)"
        is_secret: false
```

Marketplace characteristics:
- `metadata.org` set to the publishing organization
- `metadata.visibility: visibility_public` — any org can reference it
- `metadata.annotations` include support/documentation URLs
- `env_spec` descriptions precise enough for external users

```

mcp-server-creator | SkillHub