全栈开发样板

一个包含REST API、MCP服务器和iOS应用的三组件全栈开发样板,适用于快速启动跨平台项目。

  • by AustinMCrane
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 AustinMCrane/cranestack

使用说明

起重机堆叠

一个三组件堆栈的monorepo样板:

组件 技术
REST API Go、chi、SQLite
MCP服务器 Go,mark3labs/MCP-Go,HTTP/SSE+stdio
iOS应用程序 SwiftUI、iOS 18、苹果登录

建筑

iOS App  ──── POST /auth/login ──────────────► Go REST API (port 8080)
         ◄─── session token ─────────────────
         ──── POST /auth/generate-mcp-key ──►
         ◄─── PAT ──────────────────────────

AI Agent ──── MCP tool calls ───────────────► Go MCP Server (port 9090)
              (via PAT)                        │
                                              └─► Go REST API

先决条件

  • 转到1.23+
  • Xcode 16+(适用于iOS)
  • Xcodegen (brew install xcodegen)

跑步

转到REST API

# Development (with a dev session token for testing without Apple Sign-In)
make run-api

# Production
go run ./cmd/api

转到MCP服务器

# HTTP/SSE transport (default, port 9090)
make run-mcp PAT=<your-pat>

# stdio transport (for local AI agent use)
MCP_PAT_TOKEN=<your-pat> MCP_TRANSPORT=stdio go run ./cmd/mcp

iOS应用程序

  1. 打开 ios/CraneStack.xcodeproj 在Xcode中
  2. 选择模拟器或设备
  3. 构建与运行(⌘R)
  4. 在开发中,tap 开发人员登录 绕过Apple登录

编辑后重新生成Xcode项目 ios/project.yml:

cd ios && xcodegen generate

环境变量

API服务器(cmd/api)

变量 默认值 描述
DB_PATH cranestack.db SQLite数据库文件的路径
PORT 8080 API监听的端口
DEV_SESSION_TOKEN (未设置) 设置后,在没有Apple登录的情况下注册开发会话进行本地测试
LOG_FORMAT json 日志格式: json 或 text

MCP服务器(cmd/mcp)

变量 必填 描述
MCP_PAT_TOKEN ✅ API生成的个人访问令牌
MCP_TRANSPORT sse 使用交通工具: sse 或 stdio
API_BASE_URL http://localhost:8080 REST API的基本URL
LOG_FORMAT json 日志格式: json 或 text

PAT流程(开发)

# 1. Start the API with a known dev session token
make run-api

# 2. Generate a PAT using that dev token
curl -s -X POST http://localhost:8080/auth/generate-mcp-key \
  -H "Authorization: Bearer dev-session-token" | jq

# 3. Start the MCP server with that PAT
make run-mcp PAT=<token from step 2>

项目结构

cranestack/
├── cmd/
│   ├── api/main.go          # REST API entrypoint
│   └── mcp/main.go          # MCP server entrypoint
├── internal/
│   ├── apictx/              # Request context helpers (user ID)
│   ├── api/
│   │   ├── handlers/        # HTTP handlers
│   │   ├── middleware.go     # RequireAuth
│   │   ├── routes.go         # Route wiring
│   │   ├── server.go         # Server struct
│   │   └── session.go        # In-memory session store
│   ├── db/
│   │   ├── db.go             # SQLite open + migrate
│   │   ├── schema.go         # CREATE TABLE statements
│   │   └── repository.go     # Data access methods
│   └── mcp/
│       ├── client.go         # Authenticated HTTP client
│       ├── server.go         # MCP server + transport selection
│       └── tools/            # MCP tool definitions
└── ios/
    ├── project.yml           # xcodegen spec
    └── CraneStack/
        ├── CraneStackApp.swift
        ├── AuthManager.swift
        ├── APIClient.swift
        └── Views/