touch-grass-mcp
Preference-aware events discovery MCP server that aggregates events, restaurants, and cultural activities across multiple sources and re-ranks them against your personal taste profile to surface things you'd actually want to do.
README
touch-grass-mcp
Preference-aware events discovery MCP server. Surfaces what you'd actually want to do — not what's loudest.
touch-grass-mcp is a Model Context Protocol server that aggregates events, restaurants, museums, music, and trending venues across multiple sources, then re-ranks results against your taste profile so you stop scrolling generic event listings and start finding things you'd actually go to.
Self-hosted by design. Zero telemetry. All data stays on your machine.
What you get
Core (works in any US city):
- Concerts (Ticketmaster, Resident Advisor, Dice)
- Restaurants + bars (Yelp)
- Local groups + meetups (Meetup, Eventbrite)
- Theater (TodayTix)
- Breweries (Open Brewery DB)
- Weather (NWS)
- Editorial picks (Eater, Gothamist, Time Out, Hyperallergic, Artforum)
NYC pack (activates when your profile city is New York):
- Public libraries (NYPL, BPL, QPL)
- Museums (MoMA, Met, Whitney, Frick, Carnegie Hall, 92Y, Park Avenue Armory, MoMA PS1)
- Venues (Lincoln Center, Brooklyn Steel, Metrograph, Village Vanguard, Village Jazz)
- NYC Open Data (city-permitted events)
- Audubon (birding walks)
- Curated community calendars
The taste engine — what makes this different from a flat aggregator:
- Profile-driven scoring: your interests, dislikes, vibe preferences, neighborhoods
- City pulse: live trend tracker (Reddit + Google Trends + RSS) that surfaces what's rising
Install
pip install touch-grass-mcp
# or with optional pulse + NLP support:
pip install "touch-grass-mcp[pulse,nlp]"
First-run setup
# One unified onboarding wizard: profile + city pack + API keys
touch-grass setup
# Fast launch for a known city (auto-fills state + pulse defaults):
touch-grass setup --city "san francisco"
# See available city starter packs:
touch-grass list-cities
# Already configured profile? Just (re)do API keys:
touch-grass setup --keys-only
# Sanity check:
touch-grass doctor
City starter packs auto-fill subreddits, RSS feeds, and Google Trends geo when your profile city matches. Currently bundled: NYC (deep coverage), SF, LA, Chicago, Austin, Boston, Seattle, DC. PRs welcome to add more.
Wire it into Claude Desktop / Claude Code
Add to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json or ~/.claude.json):
{
"mcpServers": {
"touch-grass": {
"command": "touch-grass",
"args": ["serve"]
}
}
}
Tools exposed
23 MCP tools across 5 categories:
Event search: search_events, search_concerts, discover_niche_events, trending_events, get_event_details, search_community_calendars, search_ra_events, get_ra_event_details
Dining + venues: search_restaurants, search_breweries, get_restaurant_details
Arts + culture: search_broadway_shows, get_broadway_showtimes, get_museum_exhibitions, search_met_collection, get_editorial_picks, get_editorial_feed
Profile + recommendation: get_user_profile, update_user_preferences, get_recommendation_keywords
Calibration + utility: weekend_weather, log_flag_feedback, get_calibration_stats
Configuration
- Profile:
~/.config/touch-grass/config.json(runtouch-grass initto bootstrap) - API keys:
~/.config/touch-grass/.env(or shell env) - Cache + state:
~/.local/share/touch-grass/(XDG paths)
See CONFIG.md for the full profile schema.
Privacy
Read PRIVACY.md before installing. Short version: zero telemetry, no analytics, no phone-home, all data local.
Architecture
taste/— pure-Python preference engine: load profile, score events, rank by relevance. Zero MCP dependencies; importable from any context.pulse/— cultural trend tracker that re-ranks against current Reddit / Trends / RSS signal.packs.py— city-pack registry. NYC pack bundled. Adding a new city is a documented contribution.server.py— FastMCP server that wires it all together.
Cities other than NYC
The core pack works anywhere in the US. NYC is the bundled deep-coverage city. Adding a new city = drop scrapers in clients/<city>/, register a CityPack in packs.py, supply pulse defaults. PRs welcome.
License
MIT.
Status
v0.1 — alpha. Stable enough for personal use; expect breakage in fragile scrapers (museums, RSS).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.