import { z } from "zod";
export const generateCursorRulesSchema = {
name: "generate_cursor_rules",
description: "Generates a .cursorrules file for Cursor AI based on the project stack.",
inputSchema: z.object({
projectName: z.string().describe("Name of the project"),
languages: z.array(z.string()).describe("Programming languages used (e.g., ['typescript', 'python'])"),
frameworks: z.array(z.string()).optional().describe("Frameworks used (e.g., ['react', 'fastapi'])"),
databases: z.array(z.string()).optional().describe("Databases used (e.g., ['postgresql', 'redis'])")
})
};
export const generateGeminiConfigSchema = {
name: "generate_gemini_config",
description: "Generates a GEMINI.md file for Gemini/Antigravity configuration.",
inputSchema: z.object({
projectName: z.string().describe("Name of the project"),
languages: z.array(z.string()).describe("Programming languages used"),
description: z.string().optional().describe("Project description")
})
};
export const generateClaudeConfigSchema = {
name: "generate_claude_config",
description: "Generates a CLAUDE.md file for Claude Projects/Tasks.",
inputSchema: z.object({
projectName: z.string().describe("Name of the project"),
languages: z.array(z.string()).describe("Programming languages used"),
description: z.string().optional().describe("Project description")
})
};
export function generateCursorRulesHandler(args: any) {
const { projectName, languages, frameworks = [], databases = [] } = args;
const content = `# ${projectName} - Cursor Rules
## Project Overview
This is a ${languages.join("/")} project${frameworks.length ? ` using ${frameworks.join(", ")}` : ""}.
## Code Style
- Follow ${languages[0]} best practices and style guides
- Use consistent naming conventions
- Write self-documenting code with clear variable names
- Keep functions small and focused (< 50 lines)
## Architecture
- Separate concerns clearly (MVC, Clean Architecture, etc.)
- Use dependency injection where applicable
- Keep business logic separate from I/O
## Testing
- Write unit tests for all business logic
- Use integration tests for API endpoints
- Aim for > 80% code coverage
## Error Handling
- Use structured error handling
- Log errors with appropriate context
- Return meaningful error messages to users
## Security
- Never commit secrets or API keys
- Validate all user input
- Use parameterized queries for databases
${databases.length ? `\n## Database (${databases.join(", ")})\n- Use connection pooling\n- Handle transactions properly\n- Avoid N+1 queries` : ""}
## Documentation
- Document all public APIs
- Keep README up to date
- Use inline comments for complex logic only
`;
return {
content: [{ type: "text", text: content }]
};
}
export function generateGeminiConfigHandler(args: any) {
const { projectName, languages, description = "" } = args;
const content = `# ${projectName}
${description}
## Languages
${languages.map((l: string) => `- ${l}`).join("\n")}
## Coding Standards
- Follow ${languages[0]} best practices
- Write clean, maintainable code
- Include error handling
- Add appropriate logging
## Project Structure
- Keep related files together
- Use consistent naming conventions
- Separate concerns appropriately
## Testing Requirements
- Write tests for new features
- Maintain test coverage
## Security
- Never expose secrets in code
- Validate all inputs
- Use secure dependencies
`;
return {
content: [{ type: "text", text: content }]
};
}
export function generateClaudeConfigHandler(args: any) {
const { projectName, languages, description = "" } = args;
const content = `# ${projectName}
${description}
## Tech Stack
${languages.map((l: string) => `- ${l}`).join("\n")}
## Guidelines
1. Follow ${languages[0]} idioms and best practices
2. Write clean, readable code
3. Include proper error handling
4. Document complex logic
5. Write tests for critical paths
## Code Review Checklist
- [ ] Code follows style guide
- [ ] Tests are included
- [ ] No security vulnerabilities
- [ ] Performance considered
- [ ] Documentation updated
`;
return {
content: [{ type: "text", text: content }]
};
}
// Windsurf config generator
export const generateWindsurfConfigSchema = {
name: "generate_windsurf_config",
description: "Generates a .windsurfrules file for Windsurf IDE.",
inputSchema: z.object({
projectName: z.string(),
languages: z.array(z.string()),
description: z.string().optional()
})
};
export function generateWindsurfConfigHandler(args: any) {
const { projectName, languages, description = "" } = args;
const content = `# ${projectName} Windsurf Rules\n\n${description}\n\n## Languages\n${languages.join(", ")}\n\n## Coding Standards\n- Follow official documentation\n- Use consistent formatting\n- Write comprehensive tests\n- Handle errors properly\n`;
return { content: [{ type: "text", text: content }] };
}
// Aider config generator
export const generateAiderConfigSchema = {
name: "generate_aider_config",
description: "Generates a .aider.conf.yml file for Aider AI.",
inputSchema: z.object({
projectName: z.string(),
languages: z.array(z.string()),
model: z.string().optional().describe("AI model to use")
})
};
export function generateAiderConfigHandler(args: any) {
const { projectName, languages, model = "gpt-4" } = args;
const content = `# ${projectName} Aider Configuration\nmodel: ${model}\nauto-commits: true\nauto-test: true\n`;
return { content: [{ type: "text", text: content }] };
}
// Cline/Roo config generator
export const generateClineConfigSchema = {
name: "generate_cline_config",
description: "Generates a .clinerules file for Cline/Roo Code.",
inputSchema: z.object({
projectName: z.string(),
languages: z.array(z.string())
})
};
export function generateClineConfigHandler(args: any) {
const { projectName, languages } = args;
const content = `# ${projectName} - Cline Rules\n\n## Project Stack\n${languages.join(", ")}\n\n## Instructions\n- Follow ${languages[0]} best practices\n- Write clean, tested code\n- Handle errors appropriately\n`;
return { content: [{ type: "text", text: content }] };
}
// GitHub Copilot config generator
export const generateCopilotConfigSchema = {
name: "generate_copilot_config",
description: "Generates a .github/copilot-instructions.md for GitHub Copilot.",
inputSchema: z.object({
projectName: z.string(),
languages: z.array(z.string()),
frameworks: z.array(z.string()).optional()
})
};
export function generateCopilotConfigHandler(args: any) {
const { projectName, languages, frameworks = [] } = args;
const content = `# ${projectName} - GitHub Copilot Instructions\n\n## Tech Stack\n- Languages: ${languages.join(", ")}\n${frameworks.length ? `- Frameworks: ${frameworks.join(", ")}` : ""}\n\n## Guidelines\n- Follow ${languages[0]} idioms\n- Write clear, documented code\n- Include type hints where applicable\n- Write comprehensive tests\n`;
return { content: [{ type: "text", text: content }] };
}