From e5f4b14b7e6de1485f9bf2f5d7dfec84813b979b Mon Sep 17 00:00:00 2001 From: Taylor Leese Date: Fri, 24 Oct 2025 01:37:06 -0700 Subject: [PATCH 1/2] Add MCP Toolz to Docker MCP registry MCP Toolz provides context management, todo persistence, and AI second opinions for Claude Code. Features: - Context Management: Save/retrieve contexts (conversations, code, suggestions, errors) - Todo Persistence: Snapshot and restore todo lists across sessions - AI Second Opinions: Get feedback from ChatGPT or Claude on contexts - MCP Resources: Access recent contexts and active todos - Session Continuity: Resume work from previous sessions Source: https://github.com/taylorleese/mcp-toolz PyPI: https://pypi.org/project/mcp-toolz/ --- servers/mcp-toolz/server.yaml | 58 +++++++++ servers/mcp-toolz/tools.json | 230 ++++++++++++++++++++++++++++++++++ 2 files changed, 288 insertions(+) create mode 100644 servers/mcp-toolz/server.yaml create mode 100644 servers/mcp-toolz/tools.json diff --git a/servers/mcp-toolz/server.yaml b/servers/mcp-toolz/server.yaml new file mode 100644 index 000000000..38ddf3fae --- /dev/null +++ b/servers/mcp-toolz/server.yaml @@ -0,0 +1,58 @@ +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 AI second opinions for Claude Code. Share contexts and todos across sessions, get feedback from ChatGPT or Claude. + 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 + 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 + 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 diff --git a/servers/mcp-toolz/tools.json b/servers/mcp-toolz/tools.json new file mode 100644 index 000000000..82b1e0ca5 --- /dev/null +++ b/servers/mcp-toolz/tools.json @@ -0,0 +1,230 @@ +[ + { + "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" + } + ] + } +] From 534fd1cbc9ffc03e41877d997e9f7b69c98ebb2e Mon Sep 17 00:00:00 2001 From: Taylor Leese Date: Sat, 25 Oct 2025 00:51:34 -0700 Subject: [PATCH 2/2] Add Gemini and DeepSeek support (now 15 tools total) --- servers/mcp-toolz/server.yaml | 26 +++++++++++++++++++++++++- servers/mcp-toolz/tools.json | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/servers/mcp-toolz/server.yaml b/servers/mcp-toolz/server.yaml index 38ddf3fae..9791299e9 100644 --- a/servers/mcp-toolz/server.yaml +++ b/servers/mcp-toolz/server.yaml @@ -12,7 +12,7 @@ meta: - session-continuity about: title: MCP Toolz - description: Context management, todo persistence, and AI second opinions for Claude Code. Share contexts and todos across sessions, get feedback from ChatGPT or Claude. + 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 @@ -28,6 +28,14 @@ config: 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 @@ -41,6 +49,14 @@ config: 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: @@ -56,3 +72,11 @@ config: 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 index 82b1e0ca5..2141ae0a9 100644 --- a/servers/mcp-toolz/tools.json +++ b/servers/mcp-toolz/tools.json @@ -226,5 +226,37 @@ "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" + } + ] } ]