PerchIQX - Deep Insights. Database Intelligence.
A Model Context Protocol (MCP) server for Cloudflare D1 database introspection. Reference implementation of Semantic Intent patterns demonstrating semantic anchoring, observable properties, and domain-driven design for AI-assisted database development.
This isn't just another database introspection tool—it's a reference implementation of proven semantic intent patterns:
- ✅ Semantic Anchoring: Schema analysis based on meaning (table purpose, relationships), not technical metrics (row counts, sizes)
- ✅ Observable Properties: Decisions anchored to directly observable schema markers (foreign keys, indexes, constraints)
- ✅ Intent Preservation: Database semantics maintained through all transformations (development → staging → production)
- ✅ Domain Boundaries: Clear semantic ownership (Schema Domain ≠ Query Optimization Domain ≠ MCP Protocol Domain)
Built on research from Semantic Intent as Single Source of Truth, this implementation demonstrates how to build maintainable, AI-friendly database tools that preserve intent.
- Node.js 20.x or higher
- Cloudflare account with D1 databases
- Cloudflare API token with D1 access
-
Clone the repository
git clone https://github.com/semanticintent/semantic-perch-intelligence-mcp.git cd semantic-perch-intelligence-mcp -
Install dependencies
npm install
-
Configure environment
Copy the example configuration:
cp .env.example .env
Update
.envwith your Cloudflare credentials:# Cloudflare Configuration CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id CLOUDFLARE_API_TOKEN=your_cloudflare_api_token # D1 Database Configuration - Development D1_DEV_DATABASE_ID=your_dev_database_id D1_DEV_DATABASE_NAME=your_dev_database_name # D1 Database Configuration - Staging (Optional) D1_STAGING_DATABASE_ID=your_staging_database_id D1_STAGING_DATABASE_NAME=your_staging_database_name # D1 Database Configuration - Production (Optional) D1_PROD_DATABASE_ID=your_prod_database_id D1_PROD_DATABASE_NAME=your_prod_database_name
Note: At least one database environment must be configured.
-
Build the server
npm run build
-
Start the MCP server
npm start
Or use the provided shell script:
./start-d1-mcp.sh
- Go to Cloudflare Dashboard
- Navigate to My Profile → API Tokens
- Click Create Token
- Use the Edit Cloudflare Workers template
- Add D1 permissions:
D1:Read - Copy the token to your
.envfile
# List all your D1 databases
wrangler d1 list
# Get specific database info
wrangler d1 info <database-name>Copy the database IDs to your .env file.
This server provides 4 comprehensive MCP tools for D1 database introspection:
Analyze complete database schema structure with metadata and optional sample data.
Parameters:
environment(required):"development"|"staging"|"production"includeSamples(optional, default:true): Include sample data from tablesmaxSampleRows(optional, default:5): Maximum rows per table sample
Returns:
- Complete schema analysis
- Table structures with columns, types, constraints
- Indexes and foreign keys
- Sample data from each table (if enabled)
- Schema metadata and statistics
Example:
{
"name": "analyze_database_schema",
"arguments": {
"environment": "development",
"includeSamples": true,
"maxSampleRows": 5
}
}Extract and analyze foreign key relationships between tables.
Parameters:
environment(required): Database environmenttableName(optional): Filter relationships for specific table
Returns:
- Foreign key relationships with cardinality (one-to-many, many-to-one)
- Referential integrity rules (CASCADE, SET NULL, etc.)
- Relationship metadata and statistics
Example:
{
"name": "get_table_relationships",
"arguments": {
"environment": "production",
"tableName": "users"
}
}Validate database schema for common issues and anti-patterns.
Parameters:
environment(required): Database environment
Returns:
- Schema validation results
- Missing primary keys
- Foreign keys without indexes
- Naming convention violations
- Tables without relationships
Example:
{
"name": "validate_database_schema",
"arguments": {
"environment": "production"
}
}Generate schema optimization recommendations based on structure analysis.
Parameters:
environment(required): Database environment
Returns:
- Prioritized optimization suggestions (high/medium/low)
- Missing index recommendations
- Primary key suggestions
- Schema improvement opportunities
- Performance optimization tips
Example:
{
"name": "suggest_database_optimizations",
"arguments": {
"environment": "production"
}
}Connect this MCP server to Claude Desktop for AI-assisted database development.
-
Edit Claude Desktop config - Go to Settings → Developer → Edit Config
-
Add MCP server configuration:
{
"mcpServers": {
"semantic-perch": {
"command": "node",
"args": [
"/absolute/path/to/semantic-perch-intelligence-mcp/dist/index.js"
],
"env": {
"CLOUDFLARE_ACCOUNT_ID": "your_account_id",
"CLOUDFLARE_API_TOKEN": "your_api_token",
"D1_DEV_DATABASE_ID": "your_dev_db_id",
"D1_DEV_DATABASE_NAME": "your_dev_db_name",
"D1_STAGING_DATABASE_ID": "your_staging_db_id",
"D1_STAGING_DATABASE_NAME": "your_staging_db_name",
"D1_PROD_DATABASE_ID": "your_prod_db_id",
"D1_PROD_DATABASE_NAME": "your_prod_db_name"
}
}
}
}-
Restart Claude Desktop
-
Verify tools are available - You should see 4 D1 tools in Claude's tool list
In Claude Desktop:
"Analyze my production database schema and suggest optimizations for tables with foreign keys"
Claude will use the analyze_database_schema and suggest_database_optimizations tools automatically.
This project demonstrates Domain-Driven Hexagonal Architecture with clean separation of concerns:
┌─────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ (MCP Server - Protocol Handling) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Application Layer │
│ (Use Cases - Schema Analysis Orchestration) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Domain Layer │
│ (Schema Entities, Relationship Logic, Services) │
│ Pure Business Logic │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Infrastructure Layer │
│ (Cloudflare D1 REST API, HTTP Client) │
│ Technical Adapters │
└─────────────────────────────────────────────────────────┘
Status: ✅ Hexagonal architecture refactoring complete
Current Structure:
src/
├── domain/ # Business logic (entities, services)
│ ├── entities/ # DatabaseSchema, TableInfo, Column, etc.
│ ├── services/ # SchemaAnalyzer, RelationshipAnalyzer, etc.
│ ├── repositories/ # Port interfaces
│ └── value-objects/ # Environment enum
├── application/ # Use cases and orchestration
│ ├── use-cases/ # AnalyzeSchema, GetRelationships, etc.
│ └── ports/ # Cache provider interface
├── infrastructure/ # External adapters
│ ├── adapters/ # CloudflareD1Repository, Cache
│ ├── config/ # CloudflareConfig, DatabaseConfig
│ └── http/ # CloudflareAPIClient
├── presentation/ # MCP protocol layer
│ └── mcp/ # D1DatabaseMCPServer
└── index.ts # Composition root (DI)
See ARCHITECTURE.md for detailed design documentation.
Domain Layer:
- Database schema entities (Schema, Table, Relationship, Index)
- Schema analysis business logic
- Relationship extraction logic
- Optimization recommendation rules
Application Layer:
- Orchestrate domain services
- Execute use cases (AnalyzeSchema, GetRelationships, etc.)
- Coordinate infrastructure adapters
Infrastructure Layer:
- Cloudflare D1 REST API integration
- HTTP client for API calls
- Cache provider (in-memory)
Presentation Layer:
- MCP server initialization
- Tool registration and routing
- Request/response formatting
This codebase follows strict semantic anchoring rules:
-
Semantic Over Structural
// ✅ SEMANTIC: Based on observable schema properties const needsIndex = table.hasForeignKey() && !table.hasIndexOnForeignKey() // ❌ STRUCTURAL: Based on technical metrics const needsIndex = table.rowCount > 10000 && table.queryCount > 100
-
Intent Preservation
// ✅ Environment semantics preserved through transformations const schema = await fetchSchema(Environment.PRODUCTION) // Schema analysis preserves "production" intent - no overrides
-
Observable Anchoring
// ✅ Based on directly observable properties const relationships = extractForeignKeys(sqliteMaster) // ❌ Based on inferred behavior const relationships = inferFromQueryPatterns(logs)
See SEMANTIC_ANCHORING_GOVERNANCE.md for complete governance rules.
Status: ✅ Comprehensive test suite with 398 tests passing
- ✅ Domain Layer: 212 tests (entities, services, validation)
- ✅ Infrastructure Layer: 64 tests (D1 adapter, API client, config)
- ✅ Application Layer: 35 tests (use cases, orchestration)
- ✅ Presentation Layer: 13 tests (MCP server, tool routing)
- ✅ Integration: 15 tests (end-to-end flows)
- ✅ Value Objects: 59 tests (Environment, immutability)
Total: 398 tests (all passing ✅)
# Run all tests
npm test
# Watch mode
npm run test:watch
# With UI
npm run test:ui
# Coverage report
npm run test:coverage- Vitest: Fast unit testing framework
- @vitest/coverage-v8: Code coverage reports
- Mock Strategy: Mock Cloudflare D1 API responses via interface implementations
This codebase serves as a reference implementation for semantic intent patterns in database tooling.
Hexagonal Architecture Implementation:
- src/index.ts - Composition root with dependency injection
- src/domain/entities/ - Domain entities with semantic validation
- src/domain/services/ - Pure business logic services
- src/application/use-cases/ - Orchestration layer
- src/infrastructure/adapters/ - External adapters
- src/presentation/mcp/ - MCP protocol layer
Reference Documentation:
- D1_MCP_REFACTORING_PLAN.md - Complete refactoring plan
- SEMANTIC_ANCHORING_GOVERNANCE.md - Governance rules
- ARCHITECTURE.md - Architecture details
- semantic-context-mcp - Sibling reference implementation for context management
- semantic-chirp-intelligence-mcp - Fantasy hockey intelligence MCP (ChirpIQX)
We welcome contributions! This is a reference implementation, so contributions should maintain semantic intent principles.
- Read the guidelines: CONTRIBUTING.md
- Check refactoring plan: D1_MCP_REFACTORING_PLAN.md
- Follow the architecture: Maintain layer boundaries and semantic anchoring
- Add tests: All changes need comprehensive test coverage
- Document intent: Explain WHY, not just WHAT
- ✅ Follow semantic intent patterns
- ✅ Maintain hexagonal architecture (post-refactoring)
- ✅ Add comprehensive tests (90%+ coverage target)
- ✅ 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:
- API token management best practices
- What to commit / what to exclude
- Reporting security vulnerabilities
- Security checklist for deployment
Found a vulnerability? Email: [email protected]
This implementation is based on the research paper "Semantic Intent as Single Source of Truth: Immutable Governance for AI-Assisted Development".
- Semantic Over Structural - Schema analysis based on meaning, not metrics
- Intent Preservation - Environment semantics maintained through transformations
- Observable Anchoring - Decisions based on directly observable schema properties
- Immutable Governance - Protect semantic integrity at runtime
- Research Paper (coming soon)
- Semantic Anchoring Governance
- semanticintent.dev (coming soon)
- Monolithic MCP server with 6 tools
- D1 REST API integration
- Basic schema analysis
- 10 domain entities with semantic validation
- 3 domain services (SchemaAnalyzer, RelationshipAnalyzer, OptimizationService)
- 212 passing tests
- CloudflareD1Repository adapter
- CloudflareAPIClient HTTP client
- InMemoryCacheProvider
- 64 passing tests
- 4 use cases (AnalyzeSchema, GetRelationships, ValidateSchema, SuggestOptimizations)
- Port interfaces (ICloudflareD1Repository, ICacheProvider)
- 35 passing tests
- D1DatabaseMCPServer with 4 MCP tools
- Request/response DTOs
- 13 passing tests
- Dependency injection in index.ts
- Environment configuration
- 15 integration tests
- TypeScript build verification
- README updated
- 398 total tests passing
- GitHub Actions CI/CD workflow
- Dependabot automation
- Security scanning
- GitHub repository setup
See D1_MCP_REFACTORING_PLAN.md for detailed roadmap.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built on Model Context Protocol by Anthropic
- Inspired by Hexagonal Architecture (Alistair Cockburn)
- Based on Domain-Driven Design principles (Eric Evans)
- Part of the Semantic Intent research initiative
This is a reference implementation demonstrating semantic intent patterns for database introspection. Study the code, learn the patterns, and apply them to your own projects. 🏗️