Skip to content

Commit 32f688c

Browse files
committed
rename: Teams -> Server across product naming, build tags, and UI
Rename the multi-user edition from "MCPProxy Teams" to "MCPProxy Server" to avoid Microsoft Teams confusion and align with the cloud/LAN deployment model. Changes: - Edition string: "teams" -> "server" (version output, API /status) - Build tag: //go:build teams -> //go:build server (all 58 Go files) - Build flag: -tags teams -> -tags server (Makefile, Dockerfile, CI) - Binary: mcpproxy-teams -> mcpproxy-server - Make target: build-teams -> build-server - Docker image: mcpproxy-teams -> mcpproxy-server - UI: "MCPProxy Teams" -> "MCPProxy Server", badge text - Frontend edition check: edition === 'teams' -> edition === 'server' - All comments, log messages, and docs updated - CLAUDE.md fully updated with new naming Internal package names (internal/teams/), struct names (TeamsConfig), and config JSON key ("teams") are preserved to avoid breaking changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0d5904e commit 32f688c

69 files changed

Lines changed: 221 additions & 152 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -225,21 +225,21 @@ jobs:
225225
cgo: "1"
226226
name: mcpproxy-darwin-arm64
227227
archive_format: tar.gz
228-
# Teams edition (Linux only) — uncomment when teams MVP is ready
228+
# Server edition (Linux only) — uncomment when server MVP is ready
229229
# - os: ubuntu-latest
230230
# goos: linux
231231
# goarch: amd64
232232
# cgo: "0"
233-
# name: mcpproxy-teams-linux-amd64
233+
# name: mcpproxy-server-linux-amd64
234234
# archive_format: tar.gz
235-
# edition: teams
235+
# edition: server
236236
# - os: ubuntu-latest
237237
# goos: linux
238238
# goarch: arm64
239239
# cgo: "0"
240-
# name: mcpproxy-teams-linux-arm64
240+
# name: mcpproxy-server-linux-arm64
241241
# archive_format: tar.gz
242-
# edition: teams
242+
# edition: server
243243

244244
runs-on: ${{ matrix.os }}
245245

@@ -389,9 +389,9 @@ jobs:
389389
# Determine clean binary name and build flags
390390
EDITION="${{ matrix.edition }}"
391391
BUILD_TAGS=""
392-
if [ "$EDITION" = "teams" ]; then
393-
CLEAN_BINARY="mcpproxy-teams"
394-
BUILD_TAGS="-tags teams"
392+
if [ "$EDITION" = "server" ]; then
393+
CLEAN_BINARY="mcpproxy-server"
394+
BUILD_TAGS="-tags server"
395395
elif [ "${{ matrix.goos }}" = "windows" ]; then
396396
CLEAN_BINARY="mcpproxy.exe"
397397
else
@@ -402,7 +402,7 @@ jobs:
402402
go build ${BUILD_TAGS} -ldflags "${LDFLAGS}" -o ${CLEAN_BINARY} ./cmd/mcpproxy
403403
404404
# Build tray binary for platforms with GUI support (macOS and Windows, personal only)
405-
if [ "$EDITION" != "teams" ] && { [ "${{ matrix.goos }}" = "darwin" ] || [ "${{ matrix.goos }}" = "windows" ]; }; then
405+
if [ "$EDITION" != "server" ] && { [ "${{ matrix.goos }}" = "darwin" ] || [ "${{ matrix.goos }}" = "windows" ]; }; then
406406
echo "Building mcpproxy-tray for ${{ matrix.goos }}..."
407407
408408
# Determine tray binary name
@@ -988,7 +988,7 @@ jobs:
988988
build-docker:
989989
runs-on: ubuntu-latest
990990
needs: [build]
991-
# Disabled until teams MVP is ready — uncomment to enable
991+
# Disabled until server MVP is ready — uncomment to enable
992992
if: false && startsWith(github.ref, 'refs/tags/v')
993993
permissions:
994994
contents: read
@@ -1010,11 +1010,11 @@ jobs:
10101010
COMMIT=${{ github.sha }}
10111011
BUILD_DATE=${{ github.event.head_commit.timestamp }}
10121012
tags: |
1013-
ghcr.io/smart-mcp-proxy/mcpproxy-teams:${{ github.ref_name }}
1014-
ghcr.io/smart-mcp-proxy/mcpproxy-teams:latest
1013+
ghcr.io/smart-mcp-proxy/mcpproxy-server:${{ github.ref_name }}
1014+
ghcr.io/smart-mcp-proxy/mcpproxy-server:latest
10151015
10161016
release:
1017-
needs: [build, sign-windows, generate-notes] # add build-docker when teams MVP is ready
1017+
needs: [build, sign-windows, generate-notes] # add build-docker when server MVP is ready
10181018
runs-on: ubuntu-latest
10191019
environment: production
10201020

CLAUDE.md

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,30 @@ Only halt execution and ask a human IF:
2828

2929
MCPProxy is a Go-based desktop application that acts as a smart proxy for AI agents using the Model Context Protocol (MCP). It provides intelligent tool discovery, massive token savings, and built-in security quarantine against malicious MCP servers.
3030

31-
## Editions (Personal & Teams)
31+
## Editions (Personal & Server)
3232

3333
MCPProxy is built in two editions from the same codebase using Go build tags:
3434

3535
| Edition | Build Command | Binary | Distribution |
3636
|---------|--------------|--------|-------------|
3737
| **Personal** (default) | `go build ./cmd/mcpproxy` | `mcpproxy` | macOS DMG, Windows installer, Linux tar.gz |
38-
| **Teams** | `go build -tags teams ./cmd/mcpproxy` | `mcpproxy-teams` | Docker image, .deb package, Linux tar.gz |
38+
| **Server** | `go build -tags server ./cmd/mcpproxy` | `mcpproxy-server` | Docker image, .deb package, Linux tar.gz |
39+
40+
> Every feature decision should ask: "Does this make the personal edition so good that developers tell their teammates about it?"
3941
4042
### Key Directories
4143

4244
| Directory | Purpose |
4345
|-----------|---------|
4446
| `cmd/mcpproxy/edition.go` | Default edition = "personal" |
45-
| `cmd/mcpproxy/edition_teams.go` | Build-tagged override for teams |
46-
| `cmd/mcpproxy/teams_register.go` | Teams feature registration entry point |
47-
| `internal/teams/` | Teams-only code (all files have `//go:build teams`) |
47+
| `cmd/mcpproxy/edition_teams.go` | Build-tagged override for server edition |
48+
| `cmd/mcpproxy/teams_register.go` | Server feature registration entry point |
49+
| `internal/teams/` | Server-only code (all files have `//go:build server`) |
50+
| `internal/teams/auth/` | OAuth authentication, session management, JWT tokens, middleware |
51+
| `internal/teams/users/` | User/session models, BBolt store, user server management |
52+
| `internal/teams/workspace/` | Per-user workspace manager for personal upstream servers |
53+
| `internal/teams/multiuser/` | Multi-user router, tool filtering, activity isolation |
54+
| `internal/teams/api/` | Server REST API endpoints (user, admin, auth) |
4855
| `native/macos/` | Future Swift tray app (placeholder) |
4956
| `native/windows/` | Future C# tray app (placeholder) |
5057

@@ -54,6 +61,66 @@ The binary self-identifies its edition:
5461
- `mcpproxy version``MCPProxy v0.21.0 (personal) darwin/arm64`
5562
- `/api/v1/status``{"edition": "personal", ...}`
5663

64+
## Server Multi-User Authentication (Spec 024)
65+
66+
Server edition supports OAuth-based multi-user authentication with Google, GitHub, or Microsoft identity providers.
67+
68+
### Server Configuration
69+
70+
```json
71+
{
72+
"teams": {
73+
"enabled": true,
74+
"admin_emails": ["admin@company.com"],
75+
"oauth": {
76+
"provider": "google",
77+
"client_id": "xxx.apps.googleusercontent.com",
78+
"client_secret": "GOCSPX-xxx",
79+
"tenant_id": "",
80+
"allowed_domains": ["company.com"]
81+
},
82+
"session_ttl": "24h",
83+
"bearer_token_ttl": "24h",
84+
"workspace_idle_timeout": "30m",
85+
"max_user_servers": 20
86+
}
87+
}
88+
```
89+
90+
### Server API Endpoints
91+
92+
| Endpoint | Auth | Description |
93+
|----------|------|-------------|
94+
| `GET /api/v1/auth/login` | Public | Initiate OAuth login flow |
95+
| `GET /api/v1/auth/callback` | Public | OAuth callback (creates session) |
96+
| `GET /api/v1/auth/me` | Session/JWT | Get current user profile |
97+
| `POST /api/v1/auth/token` | Session | Generate JWT bearer token for MCP |
98+
| `POST /api/v1/auth/logout` | Session | Invalidate session |
99+
| `GET /api/v1/user/servers` | Session/JWT | List user's servers (personal + shared) |
100+
| `POST /api/v1/user/servers` | Session/JWT | Add personal upstream server |
101+
| `GET /api/v1/user/activity` | Session/JWT | User's activity log |
102+
| `GET /api/v1/user/diagnostics` | Session/JWT | Server health for user's servers |
103+
| `GET /api/v1/admin/users` | Admin | List all users |
104+
| `POST /api/v1/admin/users/{id}/disable` | Admin | Disable a user |
105+
| `GET /api/v1/admin/activity` | Admin | All users' activity logs |
106+
| `GET /api/v1/admin/sessions` | Admin | List active sessions |
107+
108+
### Server Architecture
109+
110+
- **Auth flow**: OAuth 2.0 + PKCE → Session cookie (Web UI) + JWT bearer (MCP/API)
111+
- **Server types**: Shared (config file, single connection) + Personal (DB, per-user connections)
112+
- **Isolation**: Users see only shared + own personal servers. Activity logs user-scoped.
113+
- **Admin**: Identified by `admin_emails` config. Sees all activity, manages users.
114+
- **Build tag**: All server code behind `//go:build server`. Personal edition unaffected.
115+
116+
### Server Testing
117+
118+
```bash
119+
go test -tags server ./internal/teams/... -v -race # All server unit + integration tests
120+
go build -tags server ./cmd/mcpproxy # Build server edition
121+
go build ./cmd/mcpproxy # Verify personal edition unaffected
122+
```
123+
57124
## Architecture: Core + Tray Split
58125

59126
- **Core Server** (`mcpproxy`): Headless HTTP API server with MCP proxy functionality
@@ -66,11 +133,11 @@ The binary self-identifies its edition:
66133
### Build
67134
```bash
68135
go build -o mcpproxy ./cmd/mcpproxy # Core server (personal)
69-
go build -tags teams -o mcpproxy-teams ./cmd/mcpproxy # Core server (teams)
136+
go build -tags server -o mcpproxy-server ./cmd/mcpproxy # Core server (server edition)
70137
GOOS=darwin CGO_ENABLED=1 go build -o mcpproxy-tray ./cmd/mcpproxy-tray # Tray app
71138
make build # Frontend and backend (personal)
72-
make build-teams # Frontend and backend (teams)
73-
make build-docker # Teams Docker image
139+
make build-server # Frontend and backend (server)
140+
make build-docker # Server Docker image
74141
./scripts/build.sh # Cross-platform build
75142
```
76143

@@ -546,6 +613,8 @@ See `docs/prerelease-builds.md` for download instructions.
546613
- `~/.mcpproxy/mcp_config.json` (config file), `~/.mcpproxy/config.db` (BBolt - not directly used) (027-status-command)
547614
- Go 1.24 (toolchain go1.24.10) + Cobra (CLI), Chi router (HTTP), BBolt (storage), Zap (logging), mcp-go (MCP protocol), crypto/hmac + crypto/sha256 (token hashing) (028-agent-tokens)
548615
- BBolt database (`~/.mcpproxy/config.db`) — new `agent_tokens` bucket (028-agent-tokens)
616+
- Go 1.24 (toolchain go1.24.10) + TypeScript 5.9 / Vue 3.5 + Chi router, BBolt, Zap logging, mcp-go, golang-jwt/jwt/v5, Vue 3, Pinia, DaisyUI (024-teams-multiuser-oauth)
617+
- BBolt database (`~/.mcpproxy/config.db`) - new buckets for users, sessions, user servers (024-teams-multiuser-oauth)
549618

550619
## Recent Changes
551620
- 001-update-version-display: Added Go 1.24 (toolchain go1.24.10)

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ COPY . .
1313
RUN cd frontend && npm ci && npm run build
1414
RUN mkdir -p web/frontend && cp -r frontend/dist web/frontend/
1515

16-
# Build teams binary
16+
# Build server edition binary
1717
ARG VERSION=dev
1818
ARG COMMIT=unknown
1919
ARG BUILD_DATE=unknown
2020
RUN CGO_ENABLED=0 go build \
21-
-tags teams \
21+
-tags server \
2222
-ldflags "-X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${BUILD_DATE} -X github.com/smart-mcp-proxy/mcpproxy-go/internal/httpapi.buildVersion=${VERSION} -s -w" \
2323
-o /mcpproxy ./cmd/mcpproxy
2424

Makefile

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MCPProxy Makefile
22

3-
.PHONY: help build build-teams build-docker build-deb swagger swagger-verify frontend-build frontend-dev backend-dev clean test test-coverage test-e2e test-e2e-oauth lint dev-setup docs-setup docs-dev docs-build docs-clean
3+
.PHONY: help build build-server build-docker build-deb swagger swagger-verify frontend-build frontend-dev backend-dev clean test test-coverage test-e2e test-e2e-oauth lint dev-setup docs-setup docs-dev docs-build docs-clean
44

55
SWAGGER_BIN ?= $(HOME)/go/bin/swag
66
SWAGGER_OUT ?= oas
@@ -23,10 +23,10 @@ help:
2323
@echo " make lint - Run linter"
2424
@echo " make dev-setup - Install development dependencies (swag, frontend, Playwright)"
2525
@echo ""
26-
@echo "Teams Edition:"
27-
@echo " make build-teams - Build Teams edition binary (with -tags teams)"
28-
@echo " make build-docker - Build Teams Docker image"
29-
@echo " make build-deb - Build Teams .deb package (TODO)"
26+
@echo "Server Edition:"
27+
@echo " make build-server - Build Server edition binary (with -tags server)"
28+
@echo " make build-docker - Build Server Docker image"
29+
@echo " make build-deb - Build Server .deb package (TODO)"
3030
@echo ""
3131
@echo "Documentation Commands:"
3232
@echo " make docs-setup - Install documentation dependencies"
@@ -91,28 +91,28 @@ backend-dev:
9191
@echo "🚀 Run: ./mcpproxy-dev serve"
9292
@echo "🌐 In dev mode, make sure frontend dev server is running on port 3000"
9393

94-
# Build Teams edition
95-
build-teams: swagger frontend-build
96-
@echo "🔨 Building Teams edition binary (version: $(VERSION))..."
97-
go build -tags teams -ldflags "$(LDFLAGS)" -o mcpproxy-teams ./cmd/mcpproxy
98-
@echo "Teams build completed! Run: ./mcpproxy-teams serve"
94+
# Build Server edition
95+
build-server: swagger frontend-build
96+
@echo "🔨 Building Server edition binary (version: $(VERSION))..."
97+
go build -tags server -ldflags "$(LDFLAGS)" -o mcpproxy-server ./cmd/mcpproxy
98+
@echo "Server build completed! Run: ./mcpproxy-server serve"
9999

100-
# Build Teams Docker image
100+
# Build Server Docker image
101101
build-docker:
102-
@echo "🐳 Building Teams Docker image (version: $(VERSION))..."
103-
docker build --build-arg VERSION=$(VERSION) --build-arg COMMIT=$(COMMIT) --build-arg BUILD_DATE=$(BUILD_DATE) -t mcpproxy-teams:$(VERSION) -t mcpproxy-teams:latest .
104-
@echo "✅ Docker image built: mcpproxy-teams:$(VERSION)"
102+
@echo "🐳 Building Server Docker image (version: $(VERSION))..."
103+
docker build --build-arg VERSION=$(VERSION) --build-arg COMMIT=$(COMMIT) --build-arg BUILD_DATE=$(BUILD_DATE) -t mcpproxy-server:$(VERSION) -t mcpproxy-server:latest .
104+
@echo "✅ Docker image built: mcpproxy-server:$(VERSION)"
105105

106-
# Build Teams .deb package (placeholder)
106+
# Build Server .deb package (placeholder)
107107
build-deb:
108-
@echo "📦 Building Teams .deb package..."
108+
@echo "📦 Building Server .deb package..."
109109
@echo "⚠️ TODO: Implement deb package build (nfpm or dpkg-deb)"
110110
@echo " See: https://nfpm.goreleaser.com/"
111111

112112
# Clean build artifacts
113113
clean:
114114
@echo "🧹 Cleaning build artifacts..."
115-
rm -f mcpproxy mcpproxy-dev mcpproxy-tray mcpproxy-teams
115+
rm -f mcpproxy mcpproxy-dev mcpproxy-tray mcpproxy-server
116116
rm -rf frontend/dist frontend/node_modules web/frontend
117117
go clean
118118
@echo "✅ Cleanup completed"

cmd/mcpproxy/edition_teams.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
//go:build teams
1+
//go:build server
22

33
package main
44

55
func init() {
6-
Edition = "teams"
6+
Edition = "server"
77
}

cmd/mcpproxy/status_cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func printStatusTable(info *StatusInfo) {
367367

368368
if info.TeamsInfo != nil {
369369
fmt.Println()
370-
fmt.Println("Teams")
370+
fmt.Println("Server Edition")
371371
fmt.Printf(" %-12s %s\n", "OAuth:", info.TeamsInfo.OAuthProvider)
372372
fmt.Printf(" %-12s %s\n", "Admins:", strings.Join(info.TeamsInfo.AdminEmails, ", "))
373373
}

cmd/mcpproxy/status_teams.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build teams
1+
//go:build server
22

33
package main
44

cmd/mcpproxy/status_teams_stub.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build !teams
1+
//go:build !server
22

33
package main
44

cmd/mcpproxy/teams_register.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
//go:build teams
1+
//go:build server
22

33
package main
44

5-
// Teams features are registered via init() functions in their respective
6-
// packages. The actual setup happens when the server calls teams.SetupAll()
7-
// during HTTP server initialization (see internal/server/teams_wire.go).
5+
// Server edition features are registered via init() functions in their
6+
// respective packages. The actual setup happens when the server calls
7+
// teams.SetupAll() during HTTP server initialization (see internal/server/teams_wire.go).
88
//
99
// This file imports the teams package for its init() side effects,
10-
// which register feature modules in the teams registry.
10+
// which register feature modules in the server registry.
1111
import _ "github.com/smart-mcp-proxy/mcpproxy-go/internal/teams"

frontend/src/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ function handleAuthError(event: APIAuthEvent) {
9696
}
9797
9898
onMounted(async () => {
99-
// Initialize auth state (needed for teams edition role-based nav)
99+
// Initialize auth state (needed for server edition role-based nav)
100100
await authStore.checkAuth()
101101
102102
// Set up API error listener

0 commit comments

Comments
 (0)