Skip to content

Create develop-mcp-app skill for SDK+MCP+CLI scaffolding #1

@krisrowe

Description

@krisrowe

Problem

Building a new MCP-powered tool requires repeating the same scaffolding every time: SDK+MCP+CLI three-layer architecture, pyproject.toml with entry points, CLAUDE.md with @ imports, .gemini/settings.json, CONTRIBUTING.md linking to the canonical pattern doc, test fixtures with env var isolation, .gitignore. The dominant time cost for new tools is wiring, not features.

The gapp:deploy skill covers Cloud Run deployment but is not the right place for generic app architecture guidance. There is no skill that covers the base SDK+MCP+CLI pattern independent of deployment target. Similarly, user management is an mcp-app framework capability but the only skill for it is gapp:user-management, which frames it as a post-deploy gapp concern.

Proposed solution

Create a develop-mcp-app skill in the skills marketplace (coding/develop-mcp-app/SKILL.md) that provides guidance for building MCP tools following the SDK-first architecture, covering the full lifecycle from local stdio tools through cloud-deployed multi-user apps.

What the skill covers

Base architecture (all MCP tools):

  1. Repository structuresdk/, mcp/, cli/ layers, pyproject.toml with entry points and optional extras, packaging for pip install and pipx install from git URLs.

  2. SDK-first pattern — all business logic in sdk/, MCP tools and CLI commands are one-liner calls to SDK. Link to framework/README.md.

  3. MCP framework — official MCP Python SDK (from mcp.server.fastmcp import FastMCP). Link to mcp-framework.md.

  4. Agent context setup — CLAUDE.md with @ imports, .gemini/settings.json, .gitignore. Reference setup-agent-context.

  5. Documentation conventions — README.md (usage) vs. CONTRIBUTING.md (architecture, constraints). CONTRIBUTING.md links to canonical framework doc.

  6. Testing — sociable unit tests on the SDK, env var isolation, no mocks. Reference develop-unit-tests.

  7. SDK as lightweight distribution — optional extras pattern.

Cloud / multi-user layer (mcp-app-based tools):

  1. Local vs. cloud decision — when SDK+MCP+CLI is sufficient (local stdio tools) vs. when to add mcp-app for HTTP transport, JWT auth, and per-user data isolation.

  2. mcp-app configuration — mcp-app.yaml, middleware selection (JWT, credential-proxy), store selection (filesystem, custom), tool discovery, admin endpoint setup.

  3. User management — registering users, listing users, revoking access, issuing tokens. This is an mcp-app framework capability accessible independent of deployment target.

  4. Deployment handoff — clean boundary where mcp-app concerns end and deployment (e.g., gapp:deploy) begins.

What the skill does NOT cover

  • Cloud Run deployment lifecycle (gapp:deploy)
  • Terraform, secrets management, CI/CD (gapp)
  • Plugin/extension packaging (plugin-creator)

Background

This consolidates what was previously scattered across gapp:develop (tightly coupled to Cloud Run) and gapp:user-management (framed as post-deploy). The code-level decoupling happened in gapp#7 (auth moved to app-user, absorbed by mcp-app). This issue completes the decoupling at the skills/tooling level.

Skill modes

  • Greenfield — scaffold a new repo from scratch
  • Review — audit an existing repo against canonical patterns, report drift

Open questions

  • Should mcp-app user management also be exposed as MCP tools on the mcp-app server itself (so agents can manage users directly), or is a skill that guides CLI usage sufficient?
  • Does the skill need sub-skills or should it be one document with sections?

Work breakdown

  • Create coding/develop-mcp-app/SKILL.md in the skills marketplace
  • Reference canonical docs: framework/README.md, mcp-framework.md, develop-unit-tests, setup-agent-context
  • Include mcp-app configuration and user management guidance
  • Define clean handoff point to gapp:deploy
  • Publish to marketplace and verify discovery via aicfg skills list

Related

  • framework/README.md — canonical architecture guide
  • gapp#7 (closed) — decoupled auth/user management from gapp runtime

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions