Add customization guide and fix broken doc references
- Create docs/customization-guide.md with guidance on replacing demo functionality - Add customization section to main README - Fix all references to renamed oauth-architecture-patterns.md - Update repository structure comments to clarify what to replace vs keep
This commit is contained in:
parent
78a7d1c1d0
commit
695f9f68ae
4 changed files with 133 additions and 8 deletions
19
README.md
19
README.md
|
|
@ -53,10 +53,10 @@ For detailed instructions, see [Installation](#installation).
|
||||||
This repository demonstrates a production-ready MCP deployment pattern with separate authorization and resource servers:
|
This repository demonstrates a production-ready MCP deployment pattern with separate authorization and resource servers:
|
||||||
|
|
||||||
```
|
```
|
||||||
auth-server/ # OAuth 2.0 authorization server
|
auth-server/ # OAuth 2.0 authorization server (demo only - replace in production)
|
||||||
└── src/ # Authorization endpoints and token management
|
└── src/ # Authorization endpoints and token management
|
||||||
|
|
||||||
mcp-server/ # MCP resource server
|
mcp-server/ # MCP resource server (customize tools/resources/prompts)
|
||||||
└── src/ # MCP protocol implementation with external auth
|
└── src/ # MCP protocol implementation with external auth
|
||||||
|
|
||||||
scripts/ # Testing and deployment scripts
|
scripts/ # Testing and deployment scripts
|
||||||
|
|
@ -64,7 +64,13 @@ docs/ # Architecture and API documentation
|
||||||
examples/ # Example code and usage patterns
|
examples/ # Example code and usage patterns
|
||||||
```
|
```
|
||||||
|
|
||||||
The architecture separates authentication concerns from MCP functionality, allowing you to integrate with existing OAuth providers (Auth0, Okta, etc.) or deploy your own authorization server.
|
The architecture separates authentication concerns from MCP functionality, allowing you to integrate with commercial OAuth providers (Auth0, Okta, etc.).
|
||||||
|
|
||||||
|
## Customizing for Your Use Case
|
||||||
|
|
||||||
|
This is a reference implementation with demo tools, resources, and prompts. To adapt it for production:
|
||||||
|
- **Replace MCP features:** See [Customization Guide](docs/customization-guide.md) for replacing demo functionality with your own
|
||||||
|
- **Integrate OAuth provider:** See [OAuth Architecture Patterns](docs/oauth-architecture-patterns.md) for production authentication setup
|
||||||
|
|
||||||
## Usage Examples
|
## Usage Examples
|
||||||
|
|
||||||
|
|
@ -174,7 +180,7 @@ sequenceDiagram
|
||||||
Client->>User: 9. Results
|
Client->>User: 9. Results
|
||||||
```
|
```
|
||||||
|
|
||||||
The auth server is separate so you can easily replace it with Auth0, Okta, or any OAuth provider. See [docs/oauth-patterns.md](docs/oauth-patterns.md) for alternative architectures.
|
The auth server is separate so you can easily replace it with Auth0, Okta, or any OAuth provider. See [docs/oauth-architecture-patterns.md](docs/oauth-architecture-patterns.md) for integration guidance.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
|
|
@ -320,7 +326,7 @@ This architecture pattern:
|
||||||
- **Scales independently**: Auth and MCP servers can scale based on their load
|
- **Scales independently**: Auth and MCP servers can scale based on their load
|
||||||
- **Follows standards**: Uses OAuth 2.0 and token introspection (RFC 7662)
|
- **Follows standards**: Uses OAuth 2.0 and token introspection (RFC 7662)
|
||||||
|
|
||||||
For alternative patterns like embedded OAuth, see [docs/oauth-patterns.md](docs/oauth-patterns.md).
|
For alternative patterns like embedded OAuth, see [docs/oauth-architecture-patterns.md](docs/oauth-architecture-patterns.md).
|
||||||
|
|
||||||
### OAuth Flow
|
### OAuth Flow
|
||||||
|
|
||||||
|
|
@ -361,9 +367,10 @@ The `/mock-upstream-idp` endpoints simulate what a real identity provider (Googl
|
||||||
├── scripts/ # Testing and deployment
|
├── scripts/ # Testing and deployment
|
||||||
│ └── test-e2e.sh # End-to-end OAuth + MCP verification
|
│ └── test-e2e.sh # End-to-end OAuth + MCP verification
|
||||||
├── docs/
|
├── docs/
|
||||||
|
│ ├── customization-guide.md # How to adapt this for your use case
|
||||||
│ ├── endpoints.md # API endpoint reference
|
│ ├── endpoints.md # API endpoint reference
|
||||||
│ ├── oauth-flow.md # OAuth flow documentation
|
│ ├── oauth-flow.md # OAuth flow documentation
|
||||||
│ ├── oauth-patterns.md # Alternative OAuth patterns
|
│ ├── oauth-architecture-patterns.md # OAuth integration guidance
|
||||||
│ └── session-ownership.md # Session management details
|
│ └── session-ownership.md # Session management details
|
||||||
├── examples/ # Example code and usage patterns
|
├── examples/ # Example code and usage patterns
|
||||||
│ ├── client.js # Node.js client example
|
│ ├── client.js # Node.js client example
|
||||||
|
|
|
||||||
|
|
@ -119,5 +119,5 @@ This server stores in Redis:
|
||||||
|
|
||||||
- [Main README](../README.md) - Complete project documentation
|
- [Main README](../README.md) - Complete project documentation
|
||||||
- [MCP Server README](../mcp-server/README.md) - How MCP server uses these tokens
|
- [MCP Server README](../mcp-server/README.md) - How MCP server uses these tokens
|
||||||
- [OAuth Patterns](../docs/oauth-patterns.md) - OAuth architecture patterns
|
- [OAuth Architecture Patterns](../docs/oauth-architecture-patterns.md) - OAuth integration options
|
||||||
- [OAuth Flow](../docs/oauth-flow.md) - Detailed OAuth flow analysis
|
- [OAuth Flow](../docs/oauth-flow.md) - Detailed OAuth flow analysis
|
||||||
|
|
|
||||||
117
docs/customization-guide.md
Normal file
117
docs/customization-guide.md
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
# Customization Guide
|
||||||
|
|
||||||
|
This reference implementation includes demo functionality to showcase MCP features. Here's how to adapt it for your own use case.
|
||||||
|
|
||||||
|
## Overview: What to Customize vs. Keep
|
||||||
|
|
||||||
|
**Replace with your own:**
|
||||||
|
- MCP tools, resources, and prompts (your business logic)
|
||||||
|
- Authentication provider (use commercial OAuth provider)
|
||||||
|
|
||||||
|
**Keep as-is (infrastructure):**
|
||||||
|
- Redis transport and session management
|
||||||
|
- HTTP handlers and routing
|
||||||
|
- Security middleware and rate limiting
|
||||||
|
- Logging infrastructure
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Customizing MCP Functionality
|
||||||
|
|
||||||
|
All MCP feature implementations live in **`mcp-server/src/services/mcp.ts`**. This is where you define what your server can do.
|
||||||
|
|
||||||
|
### Tools
|
||||||
|
|
||||||
|
Replace the 7 demo tools (echo, add, etc.) with your actual tools:
|
||||||
|
|
||||||
|
**Location:** `createMcpServer()` function, look for the `CallToolRequestSchema` handler
|
||||||
|
|
||||||
|
**What to change:**
|
||||||
|
- Tool definitions: name, description, input schema (using Zod)
|
||||||
|
- Tool execution logic: what happens when the tool is called
|
||||||
|
- Return format: text, images, or embedded resources
|
||||||
|
|
||||||
|
**Pattern:** Each tool validates input with a Zod schema and returns content in MCP format.
|
||||||
|
|
||||||
|
### Resources
|
||||||
|
|
||||||
|
Replace the 100 fake resources with your actual data sources:
|
||||||
|
|
||||||
|
**Location:** `createMcpServer()` function, resource-related handlers:
|
||||||
|
- `ListResourcesRequestSchema` - List available resources
|
||||||
|
- `ReadResourceRequestSchema` - Read specific resources
|
||||||
|
- `SubscribeRequestSchema` / `UnsubscribeRequestSchema` - Resource updates
|
||||||
|
|
||||||
|
**What to change:**
|
||||||
|
- Resource URIs and names
|
||||||
|
- Data fetching logic
|
||||||
|
- Pagination if needed
|
||||||
|
- Update notifications for subscribed resources
|
||||||
|
|
||||||
|
**Pattern:** Resources use URIs (e.g., `db://users/123`) and return content as text, JSON, or binary.
|
||||||
|
|
||||||
|
### Prompts
|
||||||
|
|
||||||
|
Replace the 3 demo prompts with useful prompts for your domain:
|
||||||
|
|
||||||
|
**Location:** `createMcpServer()` function, prompt-related handlers:
|
||||||
|
- `ListPromptsRequestSchema` - List available prompts
|
||||||
|
- `GetPromptRequestSchema` - Return prompt content
|
||||||
|
|
||||||
|
**What to change:**
|
||||||
|
- Prompt names and descriptions
|
||||||
|
- Prompt arguments and validation
|
||||||
|
- Prompt content and embedded resources
|
||||||
|
|
||||||
|
**Pattern:** Prompts can include dynamic arguments and reference resources.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Customizing Authentication
|
||||||
|
|
||||||
|
**Replace the demo auth server** with a commercial OAuth provider (Auth0, Okta, Azure AD, AWS Cognito, Google, GitHub, etc.).
|
||||||
|
|
||||||
|
See [OAuth Architecture Patterns](oauth-architecture-patterns.md#using-a-commercial-auth-provider) for detailed integration steps.
|
||||||
|
|
||||||
|
**Do not repurpose the demo auth server** - it's designed for development/testing only. Commercial providers offer better security, reliability, and user management.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Update environment variables for your deployment:
|
||||||
|
|
||||||
|
**MCP Server** (`mcp-server/.env`):
|
||||||
|
```bash
|
||||||
|
BASE_URI=https://your-mcp-server.com
|
||||||
|
PORT=443
|
||||||
|
AUTH_SERVER_URL=https://your-tenant.auth0.com
|
||||||
|
REDIS_URL=redis://your-redis-server:6379
|
||||||
|
```
|
||||||
|
|
||||||
|
**Auth Server** (only if using the demo server for development):
|
||||||
|
```bash
|
||||||
|
AUTH_SERVER_URL=http://localhost:3001
|
||||||
|
BASE_URI=https://your-mcp-server.com
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Testing Your Customizations
|
||||||
|
|
||||||
|
1. **Unit tests:** Add tests for your tools/resources in `mcp-server/src/services/`
|
||||||
|
2. **Integration tests:** Test with MCP Inspector or client.js
|
||||||
|
3. **Build and lint:** Run `npm run build && npm run lint`
|
||||||
|
4. **End-to-end:** Use the examples to verify OAuth and MCP flows
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. Fork/clone this repository
|
||||||
|
2. Replace tools, resources, and prompts in `mcp-server/src/services/mcp.ts`
|
||||||
|
3. Integrate with your OAuth provider (see OAuth Architecture Patterns doc)
|
||||||
|
4. Update environment variables for your deployment
|
||||||
|
5. Test thoroughly before deploying
|
||||||
|
|
||||||
|
For questions about the MCP protocol itself, see the [MCP specification](https://modelcontextprotocol.io/specification).
|
||||||
|
|
@ -130,7 +130,8 @@ To use a commercial OAuth provider instead of the demo auth server, see [OAuth A
|
||||||
## Related Documentation
|
## Related Documentation
|
||||||
|
|
||||||
- [Main README](../README.md) - Complete project documentation
|
- [Main README](../README.md) - Complete project documentation
|
||||||
|
- [Customization Guide](../docs/customization-guide.md) - How to adapt this for your use case
|
||||||
- [Auth Server README](../auth-server/README.md) - The demo OAuth provider
|
- [Auth Server README](../auth-server/README.md) - The demo OAuth provider
|
||||||
- [OAuth Patterns](../docs/oauth-patterns.md) - OAuth architecture patterns
|
- [OAuth Architecture Patterns](../docs/oauth-architecture-patterns.md) - OAuth integration options
|
||||||
- [OAuth Flow](../docs/oauth-flow.md) - Detailed OAuth flow analysis
|
- [OAuth Flow](../docs/oauth-flow.md) - Detailed OAuth flow analysis
|
||||||
- [Session Ownership](../docs/session-ownership.md) - Session management details
|
- [Session Ownership](../docs/session-ownership.md) - Session management details
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue