Thaddeus

Thaddeus

A local, JARVIS-style personal assistant that orchestrates custom MCP servers for memory, calendar, weather, Notion, Claude Code, web search, and Strava, running primarily offline with Ollama.

Category
访问服务器

README

Thaddeus

A local, JARVIS-style personal assistant, developed by Thach Ngo (Thomas Ngo). Its mission is to run fully locally and boost working efficiency and productivity. A Python orchestrator drives a local Ollama model (Qwen2.5 32B, tool-calling) which calls out to custom MCP servers over stdio for memory, calendar/reminders, weather, Notion task tracking, Claude Code delegation (planning/implementation/review), web search, IELTS grading/practice question generation, and running (Strava data + a local race tracker).

Privacy / network boundary

Most of this runs fully locally — Ollama inference, SQLite memory, macOS Calendar/Reminders access via AppleScript. Several servers are explicit, accepted exceptions that reach the network:

  • weather — plain HTTPS GET to open-meteo.com, no API key, no personal data (just coordinates or a city name).
  • notion — talks to the Notion API with your integration token, to read and manage your task database.
  • claude — the one server that reaches an LLM in the cloud (Anthropic's API via the claude CLI). Every call runs with --permission-mode plan for read-only tasks or acceptEdits + an explicit git push/commit denylist for implement_from_plan — verified live, never commits or pushes regardless of what's asked.
  • web_search — queries a self-hosted SearXNG instance (see searxng/). No API key or account of yours reaches a third party, but SearXNG itself still queries upstream engines (Google, Bing, etc.) over the network to gather results, as any metasearch aggregator does. Two alternatives were tried and rejected: Brave Search API requires a credit card on file even for its free tier, and Google's Custom Search API is closed to new signups as of 2025.

notion and claude degrade gracefully — if their .env secret isn't set, that one server is skipped with a warning and everything else still starts fine. web_search needs no secret, but does need the SearXNG container actually running.

strava is fully local — it reads your own free personal data export (activities.csv) rather than calling Strava's live API, since that now costs $11.99/month for Standard-tier access (confirmed June 2026 policy change). Not real-time; re-export periodically from Strava's account settings to refresh. Its race tracker and find_races (web search for candidate upcoming races, since Strava's API never had race data even before the paywall) work with no Strava export at all.

Strava export automation

Requesting the export itself needs a live logged-in Strava browser session, so that part can't be automated — but everything after you download the ZIP can be. A LaunchAgent (scripts/install_strava_automation.sh) runs scripts/strava_automation.py daily, which:

  • watches ~/Downloads for a Strava export ZIP (detected by checking for activities.csv inside it, not by guessing Strava's exact filename) and auto-extracts it to data/strava_export/ — no manual unzip/move step
  • creates a Reminders.app reminder every ~14 days nudging you to go re-request the export, since that step still needs you

Both halves are idempotent (tracked via marker files in data/), so the daily run is a no-op on days there's nothing to do. Uninstall: launchctl bootout gui/$(id -u)/com.thachngo.thaddeus.strava-automation then remove the plist from ~/Library/LaunchAgents/.

Setup

  1. ollama serve (if not already running), then pull a tool-calling-capable Qwen2.5 32B build (see OLLAMA_MODEL in .env for the exact tag in use)
  2. python3 -m venv .venv && source .venv/bin/activate
  3. pip install -e ".[dev]"
  4. cp .env.example .env and fill in WEATHER_DEFAULT_LAT/WEATHER_DEFAULT_LON
  5. python scripts/sanity_check_sdk.py — confirms the installed mcp SDK's actual API surface before anything else is built against it
  6. python scripts/init_db.py
  7. cd searxng && docker compose up -d && cd .. — starts the local search backend (one-time; it stays running across restarts)
  8. Optional, for running tools beyond the race tracker: request a Strava data export (account Settings > My Account > Download or Delete Your Account > Request Your Archive), extract it to data/strava_export/ once it arrives by email, then python scripts/inspect_strava_export.py to sanity-check the real column names/units against what strava_server.py assumes
  9. python -m orchestrator.main

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选