-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Session Summary
Built a complete Stripe MCP server (mcp-stripe) using the nimblebrain-contributor skill for onboarding/contribution workflow and the build-mcpb skill for server implementation. Final outcome: working server with 14 tools across 7 Stripe resources, 27 passing tests, published to JoeCardoso13/mcp-stripe.
Platform: WSL2 (Ubuntu) on Windows, Python 3.13, FastMCP 2.14+
nimblebrain-contributor Feedback
Step 1 — Environment Setup ⚠️ Friction
ty>=0.1.0 does not exist. The install table and pyproject.toml template pin ty>=0.1.0, but the latest release on PyPI is 0.0.17. uv sync --dev fails:
× No solution found when resolving dependencies:
╰─▶ Because only ty<=0.0.17 is available and mcp-stripe:dev depends on
ty>=0.1.0, we can conclude that mcp-stripe:dev's requirements are
unsatisfiable.
Suggested fix: Change constraint to "ty>=0.0.17" (or just "ty") in the template pyproject.toml and the install table.
Steps 2–3 — CLAUDE.md & Architecture ✅ Worked
No issues. Clear and well-structured.
Step 4 — Pick Work ⚠️ Friction
--label "integration" fails when label doesn't exist on the repo:
gh issue create ... --label "integration"
→ could not add label: 'integration' not found
Suggested fix: Either pre-create the label in the HQ repo, or remove --label from the skill instructions and let maintainers triage.
Step 5 — Get Started ❌ Broke
gh repo create --template fails for non-org-members:
gh repo create NimbleBrainInc/mcp-stripe \
--template NimbleBrainInc/mcp-server-template --public --clone
→ GraphQL: JoeCardoso13 does not have the correct permissions to execute
`CloneTemplateRepository`
Creating under personal account (JoeCardoso13/mcp-stripe) worked for the repo creation, but the bundled --clone step still failed (see below).
Suggested fix: The skill should guide a fork-based workflow for external contributors: create under personal namespace, then open a PR back to the org.
gh repo clone fails due to missing git-remote-https on WSL:
gh repo clone JoeCardoso13/mcp-stripe
→ git: 'remote-https' is not a git command. See 'git --help'.
failed to run git: exit status 128
Plain git clone https://... worked as a fallback. This is a WSL-specific git packaging issue, but the skill could note the fallback.
build-mcpb Feedback
Phase 1 — Discover ✅ Worked
API analysis phase worked smoothly.
Phase 2 — Scaffold ⚠️ Friction
Skill assumes scaffolding from scratch, but the template repo already has a directory structure. Could clarify the "rename/adapt existing template" path vs. creating from scratch.
Phase 3 — Implement ⚠️ Friction
Template api_client.py assumes JSON request bodies (Content-Type: application/json, json=data in aiohttp). Stripe uses application/x-www-form-urlencoded for all POST requests. We had to deviate from the template pattern.
Suggested fix: Add a note in the skill that API body encoding varies by provider, and the template's JSON default should be adapted when the target API uses form-encoded, XML, GraphQL, etc.
Phase 4 — Verify ❌ Broke (two issues)
1. ty>=0.1.0 in pyproject.toml template — same issue as nimblebrain-contributor Step 1 above.
2. FastMCP 2.14+ wraps @mcp.tool() as FunctionTool objects — the test template pattern of importing and calling tool functions directly breaks:
from mcp_stripe.server import list_customers
result = await list_customers(limit=10)
→ TypeError: 'FunctionTool' object is not callableThe decorated names are FunctionTool instances, not the original async functions. Tests must either:
- Call
.fnon the tool object:await list_customers.fn(limit=10) - Test the underlying client methods directly (what we did)
Suggested fix: Update the test template to account for FastMCP 2.x wrapping behavior. Recommend testing client logic directly rather than calling tool-decorated functions.
Phase 5 — Validate ❌ Broke
mcpb build and mpak-scanner are not available locally:
npx mcpb --version
→ npm error 404 Not Found - GET https://registry.npmjs.org/mcpb - Not found
mpak scanner scan
→ error: unknown command 'scanner'
These tools only exist in CI (via NimbleBrainInc/mcpb-pack@v2 GitHub Action).
Suggested fix: Clarify in the skill that Phase 5 packaging validation happens in CI. Provide the local alternative for runtime validation: programmatic tools/list check via the MCP tool manager.
Phase 6–7 — Document & Ship ✅ Worked
No issues with documentation or PR preparation.
Makefile Template ⚠️ Friction (cross-cutting)
sed -i '' is macOS/BSD syntax — breaks on GNU/Linux:
# Template has:
@sed -i '' 's/^version = .*/version = "$(VERSION)"/' pyproject.toml
# GNU sed treats '' as a filename → sed: can't read : No such file or directorySuggested fix: Use sed -i (no empty string) for GNU, or detect OS:
SED_INPLACE := $(shell if sed --version 2>/dev/null | grep -q GNU; then echo "sed -i"; else echo "sed -i ''"; fi)Summary Table
| Area | Item | Status |
|---|---|---|
| contributor Step 1 | ty>=0.1.0 version |
|
| contributor Step 4 | --label "integration" |
|
| contributor Step 5 | --template for non-members |
❌ Broke |
| contributor Step 5 | git-remote-https on WSL |
|
| build-mcpb Phase 2 | Scaffold vs. existing template | |
| build-mcpb Phase 3 | JSON vs form-encoded bodies | |
| build-mcpb Phase 4 | ty>=0.1.0 constraint |
❌ Broke |
| build-mcpb Phase 4 | FastMCP FunctionTool wrapping |
❌ Broke |
| build-mcpb Phase 5 | mcpb/mpak-scanner local availability |
❌ Broke |
| build-mcpb Makefile | sed -i '' on Linux |