A minimal research management app built with the Upjack framework. Track topics, evaluate sources, take structured notes, and synthesize reports, all from schemas and skills.
The simplest Upjack app. A good starting point to understand the framework before exploring the Todo or CRM examples:
- 4 entity types with JSON Schema definitions and
allOfcomposition - 1 bundled skill (research methodology: systematic investigation process)
- 1 schedule (daily topic monitoring)
- Seed data (sample research topics)
- Domain context (
context.mdwith source evaluation rubric and note-taking guidelines)
| Entity | Prefix | Schema | Notes |
|---|---|---|---|
| Topic | top_ |
topic.schema.json | Research questions with priority and key questions |
| Source | src_ |
source.schema.json | Articles, papers, reports with credibility rating (1-5) |
| Note | nt_ |
note.schema.json | Extracted insights tagged by claim type |
| Report | rpt_ |
report.schema.json | Synthesized findings with executive summary |
A five-step process: scope the topic, discover sources, evaluate credibility, extract notes, and synthesize reports. Also handles daily monitoring of active topics for new developments.
| Name | Cron | Skill |
|---|---|---|
topic-monitoring |
0 8 * * * (daily 8 AM) |
Research methodology |
- Python >= 3.13 and uv, or Node.js >= 18
- Git
git clone https://github.com/NimbleBrainInc/upjack.git
cd upjackPython:
cd lib/python
uv pip install -e ".[mcp]"TypeScript:
cd lib/typescript
npm install && npm run buildcd examples/research-assistantPython:
python server.pyTypeScript:
npx tsx server.tsTypeScript examples use
npx tsxto run.tsfiles directly. Running withnoderequires Node 22+.
The server communicates over stdio, so there's no visible output. It's ready when the terminal is waiting for input. Press Ctrl+C to stop.
It exposes tools for all four entity types (create_topic, list_topics, search_topics, etc.) and serves context.md and the research methodology skill as MCP resources.
Claude Desktop: add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"research": {
"command": "python",
"args": ["/absolute/path/to/upjack/examples/research-assistant/server.py"]
}
}
}Claude Code:
claude mcp add research -- python /absolute/path/to/upjack/examples/research-assistant/server.pyCursor: add to .cursor/mcp.json in your project:
{
"mcpServers": {
"research": {
"command": "python",
"args": ["/absolute/path/to/upjack/examples/research-assistant/server.py"]
}
}
}Codex:
codex --mcp-config '{"mcpServers":{"research":{"command":"python","args":["/absolute/path/to/upjack/examples/research-assistant/server.py"]}}}'Replace /absolute/path/to/upjack with the actual path where you cloned the repo.
Once connected, ask your agent:
- "Load the seed data" (populates sample research topics)
- "Create a topic about MCP adoption trends with high priority"
- "Add a source: the MCP spec at modelcontextprotocol.io, credibility 5"
- "Take a note on that source about how MCP enables agent interop"
- "List all my notes"
- "Create a report summarizing what we know about MCP adoption"
research-assistant/
├── manifest.json # MCPB manifest with upjack extension
├── context.md # Domain knowledge (source evaluation, note-taking)
├── server.py # 3-line Python MCP server
├── server.ts # 3-line TypeScript MCP server
├── schemas/
│ ├── topic.schema.json # Research topic schema
│ ├── source.schema.json # Source schema (credibility 1-5)
│ ├── note.schema.json # Note schema (claim types)
│ └── report.schema.json # Report schema (executive summary + body)
├── skills/
│ └── research-methodology/SKILL.md # Investigation process
└── seed/
└── sample-topics.json # Example topics (AI frameworks, MCP adoption)