diff --git a/servers/mcp-toolz/server.yaml b/servers/mcp-toolz/server.yaml new file mode 100644 index 000000000..9791299e9 --- /dev/null +++ b/servers/mcp-toolz/server.yaml @@ -0,0 +1,82 @@ +name: mcp-toolz +image: mcp/mcp-toolz +type: server +meta: + category: productivity + tags: + - context-management + - todo + - persistence + - claude-code + - ai-assistant + - session-continuity +about: + title: MCP Toolz + description: Context management, todo persistence, and multi-AI perspectives for Claude Code. Share contexts and todos across sessions, get feedback from ChatGPT, Claude, Gemini, and DeepSeek. + icon: https://avatars.githubusercontent.com/u/1024025?v=4 +source: + project: https://github.com/taylorleese/mcp-toolz + commit: f75aa7fbbdca854b7cb7521ce74065e02daa7435 +config: + description: Configure MCP Toolz with optional API keys for AI second opinions + secrets: + - name: mcp-toolz.openai_api_key + env: OPENAI_API_KEY + example: sk-... + optional: true + - name: mcp-toolz.anthropic_api_key + env: ANTHROPIC_API_KEY + example: sk-ant-... + optional: true + - name: mcp-toolz.google_api_key + env: GOOGLE_API_KEY + example: AIza... + optional: true + - name: mcp-toolz.deepseek_api_key + env: DEEPSEEK_API_KEY + example: sk-... + optional: true + env: + - name: MCP_TOOLS_DB_PATH + example: /data/contexts.db + value: '{{mcp-toolz.db_path}}' + optional: true + - name: MCP_TOOLS_MODEL + example: gpt-5 + value: '{{mcp-toolz.openai_model}}' + optional: true + - name: MCP_TOOLS_CLAUDE_MODEL + example: claude-sonnet-4-5-20250929 + value: '{{mcp-toolz.claude_model}}' + optional: true + - name: MCP_TOOLS_GEMINI_MODEL + example: gemini-2.0-flash-thinking-exp-01-21 + value: '{{mcp-toolz.gemini_model}}' + optional: true + - name: MCP_TOOLS_DEEPSEEK_MODEL + example: deepseek-chat + value: '{{mcp-toolz.deepseek_model}}' + optional: true + parameters: + type: object + properties: + db_path: + type: string + description: Path to SQLite database for contexts and todos + default: /home/app/.mcp-toolz/contexts.db + openai_model: + type: string + description: OpenAI model to use for ChatGPT responses + default: gpt-5 + claude_model: + type: string + description: Anthropic model to use for Claude responses + default: claude-sonnet-4-5-20250929 + gemini_model: + type: string + description: Google model to use for Gemini responses + default: gemini-2.0-flash-thinking-exp-01-21 + deepseek_model: + type: string + description: DeepSeek model to use for DeepSeek responses + default: deepseek-chat diff --git a/servers/mcp-toolz/tools.json b/servers/mcp-toolz/tools.json new file mode 100644 index 000000000..2141ae0a9 --- /dev/null +++ b/servers/mcp-toolz/tools.json @@ -0,0 +1,262 @@ +[ + { + "name": "context_search", + "description": "Search Claude Code contexts by query string or tags", + "arguments": [ + { + "name": "query", + "type": "string", + "description": "Search query" + }, + { + "name": "tags", + "type": "array", + "description": "Filter by tags" + }, + { + "name": "type", + "type": "string", + "description": "Filter by type (conversation, code, suggestion, error)" + }, + { + "name": "limit", + "type": "integer", + "description": "Maximum number of results (default: 10)" + } + ] + }, + { + "name": "context_get", + "description": "Get full details of a specific context by ID", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID" + } + ] + }, + { + "name": "context_list", + "description": "List recent Claude Code contexts", + "arguments": [ + { + "name": "limit", + "type": "integer", + "description": "Maximum number of results (default: 20)" + }, + { + "name": "type", + "type": "string", + "description": "Filter by type (conversation, code, suggestion, error)" + } + ] + }, + { + "name": "context_save", + "description": "Save a new context entry for the current project", + "arguments": [ + { + "name": "type", + "type": "string", + "description": "Context type (conversation, code, suggestion, error)" + }, + { + "name": "title", + "type": "string", + "description": "Context title" + }, + { + "name": "content", + "type": "string", + "description": "Context content" + }, + { + "name": "tags", + "type": "array", + "description": "Tags for categorization" + }, + { + "name": "session_context_id", + "type": "string", + "description": "Link to existing context ID" + } + ] + }, + { + "name": "context_delete", + "description": "Delete a specific context by ID", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID to delete" + } + ] + }, + { + "name": "todo_search", + "description": "Search todo snapshots by content or context description", + "arguments": [ + { + "name": "query", + "type": "string", + "description": "Search query" + }, + { + "name": "project_path", + "type": "string", + "description": "Filter by project path" + }, + { + "name": "limit", + "type": "integer", + "description": "Maximum number of results (default: 10)" + } + ] + }, + { + "name": "todo_get", + "description": "Get full details of a specific todo snapshot by ID", + "arguments": [ + { + "name": "snapshot_id", + "type": "string", + "description": "Todo snapshot ID" + } + ] + }, + { + "name": "todo_list", + "description": "List recent todo snapshots", + "arguments": [ + { + "name": "limit", + "type": "integer", + "description": "Maximum number of results (default: 20)" + }, + { + "name": "project_path", + "type": "string", + "description": "Filter by project path" + } + ] + }, + { + "name": "todo_save", + "description": "Save a new todo snapshot", + "arguments": [ + { + "name": "todos", + "type": "array", + "description": "List of todo items with content, status, and activeForm" + }, + { + "name": "project_path", + "type": "string", + "description": "Project path (defaults to current directory)" + }, + { + "name": "context", + "type": "string", + "description": "Description of what you're working on" + }, + { + "name": "session_context_id", + "type": "string", + "description": "Link to existing context ID" + } + ] + }, + { + "name": "todo_restore", + "description": "Get todo snapshot for restoring (active snapshot or specific ID)", + "arguments": [ + { + "name": "snapshot_id", + "type": "string", + "description": "Specific snapshot ID (optional, defaults to active snapshot)" + }, + { + "name": "project_path", + "type": "string", + "description": "Project path (used if snapshot_id not provided)" + } + ] + }, + { + "name": "todo_delete", + "description": "Delete a specific todo snapshot by ID", + "arguments": [ + { + "name": "snapshot_id", + "type": "string", + "description": "Todo snapshot ID to delete" + } + ] + }, + { + "name": "ask_chatgpt", + "description": "Ask ChatGPT a question about a context entry, or get a general second opinion", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID to ask about" + }, + { + "name": "question", + "type": "string", + "description": "Optional specific question to ask about the context" + } + ] + }, + { + "name": "ask_claude", + "description": "Ask Claude a question about a context entry, or get a general second opinion", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID to ask about" + }, + { + "name": "question", + "type": "string", + "description": "Optional specific question to ask about the context" + } + ] + }, + { + "name": "ask_gemini", + "description": "Ask Google Gemini a question about a context entry, or get a general second opinion", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID to ask about" + }, + { + "name": "question", + "type": "string", + "description": "Optional specific question to ask about the context" + } + ] + }, + { + "name": "ask_deepseek", + "description": "Ask DeepSeek a question about a context entry, or get a general second opinion", + "arguments": [ + { + "name": "context_id", + "type": "string", + "description": "Context ID to ask about" + }, + { + "name": "question", + "type": "string", + "description": "Optional specific question to ask about the context" + } + ] + } +]