Reference implementation of Semantic Intent as Single Source of Truth patterns
A Model Context Protocol (MCP) server demonstrating semantic anchoring, intent preservation, and observable property patterns for AI-assisted development.
- What Makes This Different
- Quick Start
- Architecture
- Features
- Testing
- Database Setup
- Contributing
- Security
- License
This isn't just another MCP server—it's a reference implementation of proven semantic intent patterns:
- ✅ Semantic Anchoring: Decisions based on meaning, not technical characteristics
- ✅ Intent Preservation: Semantic contracts maintained through all transformations
- ✅ Observable Properties: Behavior anchored to directly observable semantic markers
- ✅ Domain Boundaries: Clear semantic ownership across layers
Built on research from Semantic Intent as Single Source of Truth, this implementation demonstrates how to build maintainable, AI-friendly codebases that preserve intent.
- Node.js 20.x or higher
- Cloudflare account (free tier works)
- Wrangler CLI:
npm install -g wrangler
-
Clone the repository
git clone https://github.com/semanticintent/semantic-context-mcp.git cd semantic-context-mcp
-
Install dependencies
npm install
-
Configure Wrangler
Copy the example configuration:
cp wrangler.jsonc.example wrangler.jsonc
Create a D1 database:
wrangler d1 create mcp-context
Update
wrangler.jsonc
with your database ID: -
Run database migrations
# Local development wrangler d1 execute mcp-context --local --file=./migrations/0001_initial_schema.sql # Production wrangler d1 execute mcp-context --file=./migrations/0001_initial_schema.sql
-
Start development server
npm run dev
npm run deploy
Your MCP server will be available at: semantic-context-mcp.<your-account>.workers.dev
This codebase demonstrates semantic intent patterns throughout:
- src/index.ts - Dependency injection composition root (74 lines)
- src/domain/ - Business logic layer (ContextSnapshot, ContextService)
- src/application/ - Orchestration layer (handlers and protocol)
- src/infrastructure/ - Technical adapters (D1, AI, CORS)
- src/presentation/ - HTTP routing layer (MCPRouter)
- migrations/0001_initial_schema.sql - Schema with semantic intent documentation
- src/types.ts - Type-safe semantic contracts
- SEMANTIC_ANCHORING_GOVERNANCE.md - Governance rules and patterns
- REFACTORING_PLAN.md - Complete refactoring documentation
Each file includes comprehensive comments explaining WHY decisions preserve semantic intent, not just WHAT the code does.
You can connect to your MCP server from the Cloudflare AI Playground, which is a remote MCP client:
- Go to https://playground.ai.cloudflare.com/
- Enter your deployed MCP server URL (
remote-mcp-server-authless.<your-account>.workers.dev/sse
) - You can now use your MCP tools directly from the playground!
You can also connect to your remote MCP server from local MCP clients, by using the mcp-remote proxy.
To connect to your MCP server from Claude Desktop, follow Anthropic's Quickstart and within Claude Desktop go to Settings > Developer > Edit Config.
Update with this configuration:
{
"mcpServers": {
"semantic-context": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8787/sse" // or semantic-context-mcp.your-account.workers.dev/sse
]
}
}
}
Restart Claude and you should see the tools become available.
This project demonstrates Domain-Driven Hexagonal Architecture with clean separation of concerns:
┌─────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ (MCPRouter - HTTP routing) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Application Layer │
│ (ToolExecutionHandler, MCPProtocolHandler) │
│ MCP Protocol & Orchestration │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Domain Layer │
│ (ContextService, ContextSnapshot) │
│ Business Logic │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Infrastructure Layer │
│ (D1ContextRepository, CloudflareAIProvider) │
│ Technical Adapters (Ports & Adapters) │
└─────────────────────────────────────────────────────────┘
Domain Layer (src/domain/):
- Pure business logic independent of infrastructure
ContextSnapshot
: Entity with validation rulesContextService
: Core business operations
Application Layer (src/application/):
- Orchestrates domain operations
ToolExecutionHandler
: Translates MCP tools to domain operationsMCPProtocolHandler
: Manages JSON-RPC protocol
Infrastructure Layer (src/infrastructure/):
- Technical adapters implementing ports (interfaces)
D1ContextRepository
: Cloudflare D1 persistenceCloudflareAIProvider
: Workers AI integrationCORSMiddleware
: Cross-cutting concerns
Presentation Layer (src/presentation/):
- HTTP routing and request handling
MCPRouter
: Routes requests to appropriate handlers
Composition Root (src/index.ts):
- Dependency injection
- Wires all layers together
- 74 lines (down from 483 - 90% reduction)
- ✅ Testability: Each layer independently testable
- ✅ Maintainability: Clear responsibilities per layer
- ✅ Flexibility: Swap infrastructure (D1 → Postgres) without touching domain
- ✅ Semantic Intent: Comprehensive documentation of WHY
- ✅ Type Safety: Strong TypeScript contracts throughout
- save_context: Save conversation context with AI-powered summarization and auto-tagging
- load_context: Retrieve relevant context for a project
- search_context: Search contexts using keyword matching
This project includes comprehensive unit tests with 70 tests covering all architectural layers.
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with UI
npm run test:ui
# Run tests with coverage report
npm run test:coverage
- ✅ Domain Layer: 15 tests (ContextSnapshot validation, ContextService orchestration)
- ✅ Application Layer: 10 tests (ToolExecutionHandler, MCP tool dispatch)
- ✅ Infrastructure Layer: 20 tests (D1Repository, CloudflareAIProvider with fallbacks)
- ✅ Presentation Layer: 12 tests (MCPRouter, CORS, error handling)
- ✅ Integration: 13 tests (End-to-end service flows)
Tests are co-located with source files using the .test.ts
suffix:
src/
├── domain/
│ ├── models/
│ │ ├── ContextSnapshot.ts
│ │ └── ContextSnapshot.test.ts
│ └── services/
│ ├── ContextService.ts
│ └── ContextService.test.ts
├── application/
│ └── handlers/
│ ├── ToolExecutionHandler.ts
│ └── ToolExecutionHandler.test.ts
└── ...
All tests use Vitest with mocking for external dependencies (D1, AI services).
This project uses GitHub Actions for automated testing and quality checks.
Automated Checks on Every Push/PR:
- ✅ TypeScript compilation (
npm run type-check
) - ✅ Unit tests (
npm test
) - ✅ Test coverage reports
- ✅ Code formatting (Biome)
- ✅ Linting (Biome)
Status Badges:
- CI status displayed at top of README
- Automatically updates on each commit
- Shows passing/failing state
Workflow Configuration: .github/workflows/ci.yml
The CI pipeline runs on Node.js 20.x and ensures code quality before merging.
This project uses Cloudflare D1 for persistent context storage.
-
Create D1 Database:
wrangler d1 create mcp-context
-
Update
wrangler.jsonc
with your database ID:{ "d1_databases": [ { "binding": "DB", "database_name": "mcp-context", "database_id": "your-database-id-here" } ] }
-
Run Initial Migration:
wrangler d1 execute mcp-context --file=./migrations/0001_initial_schema.sql
For local testing, initialize the local D1 database:
wrangler d1 execute mcp-context --local --file=./migrations/0001_initial_schema.sql
Check that tables were created successfully:
# Production
wrangler d1 execute mcp-context --command="SELECT name FROM sqlite_master WHERE type='table'"
# Local
wrangler d1 execute mcp-context --local --command="SELECT name FROM sqlite_master WHERE type='table'"
All database schema changes are managed through versioned migration files in migrations/
:
0001_initial_schema.sql
- Initial context snapshots table with semantic indexes
See migrations/README.md for detailed migration management guide.
This project is licensed under the MIT License - see the LICENSE file for details.
This implementation is based on the research paper "Semantic Intent as Single Source of Truth: Immutable Governance for AI-Assisted Development".
- Semantic Over Structural - Use meaning, not technical characteristics
- Intent Preservation - Maintain semantic contracts through transformations
- Observable Anchoring - Base behavior on directly observable properties
- Immutable Governance - Protect semantic integrity at runtime
- Research Paper (coming soon)
- Semantic Anchoring Governance
- semanticintent.dev (coming soon)
We welcome contributions! This is a reference implementation, so contributions should maintain semantic intent principles.
- Read the guidelines: CONTRIBUTING.md
- Check existing issues: Avoid duplicates
- Follow the architecture: Maintain layer boundaries
- Add tests: All changes need test coverage
- Document intent: Explain WHY, not just WHAT
- ✅ Follow semantic intent patterns
- ✅ Maintain hexagonal architecture
- ✅ Add comprehensive tests
- ✅ Include semantic documentation
- ✅ Pass all CI checks
Quick Links:
- Contributing Guide - Detailed guidelines
- Code of Conduct - Community standards
- Architecture Guide - Design principles
- Security Policy - Report vulnerabilities
- 💬 Discussions - Ask questions
- 🐛 Issues - Report bugs
- 🔒 Security - Report vulnerabilities privately
Security is a top priority. Please review our Security Policy for:
- Secrets management best practices
- What to commit / what to exclude
- Reporting security vulnerabilities
- Security checklist for deployment
Found a vulnerability? Email: security@semanticintent.dev