Project Info
Inspiration
Modern teams are drowning in tools but starving for alignment. Tasks live in one app, calendars in another, decisions get lost in chat, and critical context disappears as conversations scroll by. We kept running into the same pain while building with friends: the work wasn’t hard — staying synced was. So we asked a simple question: what if every team had a shared operational brain? Not another dashboard. Not another “process.” A brain that lives where teams already operate: messages. The same “text an AI and it just does it” experience (à la Poke), but tuned for how dev teams actually work: calendar tetris, shared knowledge, lists — and the piece that felt missing — code. If you can text “add a blue CTA to the landing page,” why can’t you get a real PR back? That became Rally: one MCP server that plugs into Poke and turns group chat into alignment + execution.
What it does
Rally is an AI-powered operational brain for teams — built for messaging-first startups. Teams message Rally through iMessage (via Poke) to: Schedule meetings + find team availability Store and retrieve knowledge (decisions, brand, runbooks) Manage shared lists (shopping, tasks, launch checklists) Ship code from a text (“add a blue button” → PR link) Instead of forcing new workflows, Rally turns messy team conversation into structured, searchable team state — so context doesn’t die in the scroll. Rally workflow 1) Messaging → structured team state When teammates text Rally in their own 1:1 Poke threads, Rally writes into a team-scoped database: Calendar events (team + personal opt-in visibility) Decisions / notes / runbooks Lists and recurring ops Rally normalizes messages into structured objects (events, decisions, tasks) so they’re queryable and consistent even when people ask things differently. 2) Semantic “team memory” retrieval When someone asks “what did we decide about onboarding?” or “what’s the launch checklist?”, Rally: generates embeddings for new notes stores them in the team index retrieves relevant context by meaning (not keywords) responds conversationally with the source context So the brain gets smarter over time, without anyone maintaining documentation manually. 3) Text-to-PR pipeline (the “ship it” moment) When someone requests a code change (“make the CTA blue”, “add rate limiting”, “fix the navbar on mobile”), Rally: pulls repo context (registered once) clones the repo into a sandbox has an agent propose a plan + file-level edits runs checks/tests commits, pushes a branch, and opens a PR returns the PR link right back into iMessage One message → a real PR, with verification. Rally vs Poke group chat (why we exist) Poke group chats are intentionally limited for privacy: no one’s personal calendars, email, etc. In group chat, Poke is mostly web/search/images/reminders. Rally is the opt-in “shared layer.” If your team wants shared context — shared calendar, shared knowledge, shared lists, and text-to-PR — you add Rally. Everything is team-scoped by default, and personal visibility is explicit opt-in. So: Poke 1:1 = your personal assistant Poke group chat = lightweight coordination + chaos Poke + Rally = a real team operating system in messages
How we built it
MCP Server (Python / FastMCP): exposes tools for calendar, knowledge, lists, and code workflows Team state + API: persistent DB + REST endpoints for a lightweight dashboard Semantic memory: embeddings + search index for “decision retrieval” and runbook recall Text-to-PR: GitHub repo registration → sandbox clone → agent edits → checks → PR via GitHub API Poke integration: Rally appears as a single MCP integration (“Rally”) so Poke can reliably discover and call tools
Challenges we ran into
Multi-user async consistency: two people can ask for updates in different threads at different times — keeping shared state deterministic (especially calendar logic) was harder than it looked. Tool discoverability + naming: MCP clients are picky; small naming mismatches made tools appear but not callable. We unified tool naming and reduced integration ambiguity so Poke consistently executed the right functions.
What we learned
Teams don’t struggle from a lack of tools — they struggle from fragmented context. The fastest way to ship isn’t more dashboards; it’s reducing coordination overhead by making the “state of the team” always available, always current, and living where people already talk. We also learned that messaging integrations live and die by reliability: one clean MCP integration, deterministic tool behavior, and clear boundaries around shared vs personal data makes the experience feel real.
What's next
Proactive “ops nudges” (blockers, risks, stale decisions) Automatic meeting summaries → action items → owners Decision tracking with versioning (“what changed since last week?”) Deeper integrations (Linear/Jira, Notion, Slack, Figma) Smarter code changes: multi-step PRs, review suggestions, and rollback safety
Rapid
Multiplayer Poke — a shared AI assistant for teams. Connect this MCP server to Poke for:
- Calendar tetris — Find 30-min windows when the whole dev team is free
- Shared knowledge — "Remember: our brand colors are #FF6B35 and #004E89"
- Meeting booking — Book slots and relay to team members
- Shopping lists — Team shopping lists (Visa commerce track)
Quick Start
1. Install & run locally
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
pip install -r requirements.txt
python src/server.py
Server runs at http://localhost:8000/mcp
2. Connect to Poke
Option A: Tunnel (local dev) — if you have the Poke CLI:
poke tunnel http://localhost:8000/mcp --name "Team Brain"
Option B: Add remote URL — no Poke CLI needed: run ngrok http 8000, then use https://YOUR-NGROK-URL/mcp in Poke settings.
- Deploy to Render (see below) or expose via ngrok
- Go to poke.com/settings/connections
- Create Integration → MCP Server URL:
https://your-url/mcp→ Name: "Team Brain"
3. Try it in Poke
Ask Poke things like:
- "Use the Team Brain integration to store that our brand colors are #FF6B35 and #004E89"
- "Use Team Brain to add milk to the shopping list"
- "Use Team Brain to find when Alice and Bob are free next week"
Text-to-PR (Vercel / GitHub): Register a repo once, then request changes via text. Poke will use Claude to edit the code and open a PR.
- "Use Team Brain to register my project: repo https://github.com/username/my-app, branch main, name my Vercel project" → calls
register_project - "Use Team Brain to make changes on my Vercel project: make the header say Welcome and add a blue CTA button" → calls
request_code_change; you get back a PR link (and optional Vercel preview).
Requires on the server: GITHUB_TOKEN (repo push + create PR), ANTHROPIC_API_KEY (Claude for code edits). Optional: CLAUDE_CODING_MODEL (default claude-sonnet-4-5).
Tools (14 total)
| Tool | Description |
|---|---|
set_availability | Record when a team member is free |
find_availability | Find overlapping free slots for team |
book_meeting | Book a meeting — stores internally and pushes to teammates' Pokes |
list_team_calendar | List all booked meetings (shared team calendar) |
register_for_calendar_sync | Register your Poke webhook/API key to receive calendar invites |
store_knowledge | Store team facts (brand, policy, etc.) |
query_knowledge | Search team knowledge |
add_to_shopping_list | Add item to shared list |
get_shopping_list | Get shopping list |
remove_from_shopping_list | Remove item |
register_project | Register a GitHub repo for “text-to-PR” (Vercel project) |
list_projects_tool | List registered projects for the team |
request_code_change | Request code changes on a registered project → agent makes edits and opens a PR |
get_team_brain_info | Server info |
Use team_id (default: "default") to scope to a team. Each teammate adds the same MCP server; the server stores data per team.
Calendar sync flow
-
Add API keys — Create
poke_api_keys.txtin the project root with your and teammates' Poke API keys (one per line):me:pk_your_key friend:pk_their_keyGet keys at poke.com/kitchen/api-keys
-
You text Cortex (e.g. via SMS): "Book 7pm for tonight" or "Make a calendar invite for today at 7pm"
-
Poke calls
book_meeting→ event stored in Team Brain -
All keys in the file receive the invite in their Poke → adds to their calendar (Poke calendar sync)
-
Anyone can ask "What's on the team calendar?" → sees all meetings
Deploy to Render
- Push to GitHub
- Connect repo to Render
- New Web Service → Render will use
render.yaml - Your MCP URL:
https://team-brain-mcp.onrender.com/mcp
Frontend (Next.js)
The dashboard displays calendar, knowledge, and shopping data from the API (Elasticsearch when configured):
# Terminal 1: MCP server (for Poke)
python src/server.py
# Terminal 2: REST API (for frontend) — run from project root so .env loads
python run_api.py
# Terminal 3: Frontend
cd frontend && npm install && npm run dev
- MCP (Poke): http://localhost:8000/mcp
- REST API: http://localhost:8001/api/...
- Frontend: http://localhost:3000
Set NEXT_PUBLIC_API_URL in frontend/.env.local to override the API URL (e.g. when deployed).
Elasticsearch + JINA (Optional)
For persistent storage and semantic knowledge search:
- Elastic Cloud — Create a deployment at cloud.elastic.co
- Env vars:
ELASTIC_CLOUD_ID+ELASTIC_API_KEY(from Elastic Cloud)- Or
ELASTIC_URL(e.g.http://localhost:9200) +ELASTIC_API_KEYfor self-hosted JINA_API_KEY— from jina.ai for embeddings
- Knowledge base —
store_knowledgeandquery_knowledgeuse JINA v3 embeddings for semantic search (finds by meaning, not just keywords)
The elastic/ folder contains a workflow template for Elastic Agent Builder integration.
Sponsor Tracks
- Poke / Interaction Co. — MCP server, Poke-native, team coordination
- Elastic — JINA v3 embeddings, semantic search, Elastic Cloud, Agent Builder workflows
- Decagon — Multi-turn conversational agent
- Anthropic — Reduces calendar anxiety; tool-using agent
- Greylock — Multi-turn agent; chains tools
- Visa — Shopping automation; shared lists
- Graphite — Real product; team calendar + shared brain
Analysis
View
Metric
- 11
- 9
- 3
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FlaskIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- JavaScriptClaimed
8 of 9 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- CursorCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
112 KB
Source files
28
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
aaditgupta21/treehacks26
46 files · 377 KB · @ 2e3f6d5
Structure
Interface
10 files · 22%Screens, components and styles rendered to the user.
Application logic
13 files · 28%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python61%
- TypeScript22%
- CSS9%
- Markdown6%
- YAML1%
- Shell0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 11- next
- react
- react-dom
- +8 more
requirements.txt
pypi · 7- anthropic
- elasticsearch
- fastmcp
- flask
- flask-cors
- httpx
- python-dotenv
package.json
npm · 1- poke
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.