upjack
Declarative AI-native application framework — schema-driven entities, Markdown skills, MCPB packaging
Install / Use
claude mcp add NimbleBrainInc -- npx -y github:NimbleBrainInc/upjackIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Our assessment of upjack
upjack scores 77/100 on our quality scale, 829th of 964 AI & Machine Learning skills we index.
Its MCP Server is 16 KB long, well organised into 29 sections with 21 code examples: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated about 6 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
- Our last check on 2026-08-09 found the source still online.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 95/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-10-13. Automated pattern scan on 2026-10-13. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
upjack compared with similar skills
All 4 of these similar skills score higher than upjack; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| upjack (this skill)by NimbleBrainInc | 77 | 10 | 6mo ago | MCP Server |
| claude-memby thedotmack | 100 | 100.4k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 97.0k | 5d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 86.2k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 75.2k | today | CLAUDE.md |
Frequently asked questions
- How do I install upjack?
- Run
claude mcp add NimbleBrainInc -- npx -y github:NimbleBrainInc/upjack. The install tabs above show the steps for each supported agent. - Which AI agents does upjack work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is upjack safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is Apache-2.0-licensed and scores 95/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is upjack still maintained?
- The repository was last updated about 6 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
Skill content
View source on GitHubBuild AI-powered apps by describing your domain, not writing code.
Write a JSON Schema for your data. Write Markdown for your domain expertise. Get entity management, validation, search, and a complete MCP server, automatically.
No API code. No database. No deployment config.
What You Get
Define an entity schema and a skill in Markdown. Upjack gives you:
- 6 MCP tools per entity:
create_<entity>,get_<entity>,update_<entity>,list_<entities>,search_<entities>,delete_<entity> - Schema validation on every write. Invalid data never hits storage.
- Type-prefixed IDs like
tk_01HZ3QKB...so you know the type at a glance - Full-text search across all string fields
- JSON file storage in a git-friendly directory structure
- Skills as resources: your Markdown expertise files are served to the agent via
upjack://skills/*
Define a task tracker, a CRM, a research notebook, an inventory system — any domain. Your AI agent gets full CRUD, search, and domain expertise from just two files.
Prerequisites
You don't need deep knowledge of these to get started, but they're helpful context:
| Concept | What It Is | Learn More |
|---------|-----------|------------|
| JSON Schema | A standard for describing the shape of JSON data. Upjack uses it to define what each entity looks like. | Getting Started |
| MCP | Model Context Protocol — a standard that lets AI agents call tools and read resources. Upjack can expose your app as an MCP server so agents can interact with it. | Introduction |
| MCPB | MCP Bundle — a packaging format for distributing MCP servers. Upjack apps use the MCPB manifest format, with upjack-specific config in a _meta extension field. | Spec |
| ULID | Universally Unique Lexicographically Sortable Identifier — like a UUID but sortable by creation time. Upjack uses prefixed ULIDs as entity IDs (e.g., ct_01HZ3QKB...). | Spec |
| CRUD | Create, Read, Update, Delete — the four basic data operations. Upjack auto-generates these for every entity type. | — |
| stdio | Standard input/output — a way for programs to communicate by reading from stdin and writing to stdout. MCP servers use stdio so any MCP client can connect to them. | — |
| FastMCP | A Python library that makes it easy to build MCP servers. Upjack uses it internally to generate your MCP tools. Install via upjack[mcp]. | Docs |
| allOf | A JSON Schema keyword that combines multiple schemas. Upjack uses it to layer your app-specific fields on top of the base entity schema (which provides id, status, created_at, etc.). | JSON Schema docs |
Quick Start
Two ways to get started. The fast way lets your AI agent build the app for you. The manual way gives you full control.
The Fast Way: Let Your Agent Build It
Install the Upjack App Builder skill, describe what you want, and your agent generates a complete app.
Prerequisites: Node.js v18+
1. Install the skill
npx @nimblebrain/mpak skill install @nimblebraininc/upjack-app-builder
2. Tell your agent what you want
claude > Build me a CRM app
The agent generates a complete, ready-to-run app:
my-crm/
manifest.json # Wiring: entities, skills, hooks, schedules
schemas/
contact.schema.json # Entity definitions (JSON Schema)
company.schema.json
deal.schema.json
skills/
lead-qualification/
SKILL.md # Domain expertise the agent reads
context.md # Background knowledge
seed/
sample-contacts.json # Initial data
server.py # MCP server entry point
3. Run it
cd my-crm
uv sync && python server.py # Python
# or: npm install && npx tsx server.ts # TypeScript
Done. Your agent now has tools like create_contact, list_contacts, and search_contacts, plus resources for your domain knowledge and skills.
The Manual Way: Build It Yourself
If you prefer to understand every file and wire things up by hand.
1. Install
Python 3.13+ required. Check your version:
python --version
# Python
pip install upjack # or: uv add upjack
pip install "upjack[mcp]" # with MCP server support
# TypeScript (Node.js >= 18)
npm install upjack
2. Try an example
git clone https://github.com/NimbleBrainInc/upjack.git
cd upjack
pip install "upjack[mcp]"
python examples/todo/server.py # or: npx tsx examples/todo/server.ts
The server communicates over stdio — no visible output. It's ready when the terminal is waiting for input. Ctrl+C to stop.
Connect it to Claude Code, Claude Desktop, Cursor, or Codex. See the Todo README for copy-paste configs.
All three examples (Todo, CRM, Research Assistant) work the same way.
3. Scaffold your own app
upjack init
# prompts: App name? → my-crm | First entity? → contact
Creates a ready-to-run app directory:
my-crm/
manifest.json # Wiring: entities, skills, hooks, schedules
schemas/
contact.schema.json # What a contact looks like (JSON Schema)
context.md # Domain knowledge the agent always has
seed/
sample-contacts.json # Initial data
server.py # 3-line MCP server entry point (Python)
server.ts # 3-line MCP server entry point (TypeScript)
4. Create a manifest
manifest.json follows the MCPB package format. Upjack-specific config lives in _meta["ai.nimblebrain/upjack"]:
{
"manifest_version": "0.4",
"name": "my-notes-app",
"version": "0.1.0",
"title": "Notes",
"server": null,
"_meta": {
"ai.nimblebrain/upjack": {
"upjack_version": "0.1",
"namespace": "apps/notes",
"entities": [
{
"name": "note",
"plural": "notes",
"prefix": "nt",
"schema": "schemas/note.schema.json"
}
]
}
}
}
The namespace determines where entity files are stored. The prefix is prepended to generated IDs (nt_01HZ3QKB...).
5. Create an entity schema
Create schemas/note.schema.json:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": { "type": "string" },
"body": { "type": "string" },
"tags": { "type": "array", "items": { "type": "string" } }
},
"required": ["title"]
}
6. Use it (Python)
from upjack import UpjackApp
app = UpjackApp.from_manifest("manifest.json")
note = app.create_entity("note", {"title": "Hello", "body": "My first note"})
print(note["id"]) # nt_01HZ3QKB9YWVJ0RPFA7MT8C5X
notes = app.list_entities("note")
results = app.search_entities("note", query="hello")
app.update_entity("note", note["id"], {"body": "Updated body"})
app.delete_entity("note", note["id"]) # soft delete
Invalid data never reaches storage:
app.create_entity("note", {"body": "No title"})
# jsonschema.ValidationError: 'title' is a required property
7. Use it (TypeScript)
import { UpjackApp } from "upjack";
const app = UpjackApp.fromManifest("manifest.json");
const note = app.createEntity("note", { title: "Hello", body: "My first note" });
console.log(note.id); // nt_01HZ3QKB9YWVJ0RPFA7MT8C5X
const notes = app.listEntities("note");
const results = app.searchEntities("note", { query: "hello" });
app.updateEntity("note", note.id, { body: "Updated body" });
app.deleteEntity("note", note.id); // soft delete
8. Serve as an MCP server
Python:
from upjack.server import create_server
mcp = create_server("manifest.json")
mcp.run()
# Tools: create_note, get_note, update_note, list_notes, search_notes, delete_note
TypeScript:
import { startServer } from "upjack/server";
startServer("manifest.json");
9. Connect to your agent
The server communicates over stdio. Point any MCP-compatible client at your server:
Claude Code:
claude mcp add my-notes-app -- python /path/to/my-notes-app/server.py
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"my-notes-app": {
"command": "python",
"args": ["/path/to/my-notes-app/server.py"]
}
}
}
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"my-notes-app": {
"command": "python",
"args": ["/path/to/my-notes-app/server.py"]
}
}
}
Codex:
codex --mcp-config '{"mcpServers":{"my-notes-app":{"command":"python","args":["/path/to/my-notes-app/server.py"]}}}'
For TypeScript, replace
python/server.pywithnpx tsx/server.ts.
The agent sees tools like create_note, list_notes, search_notes, and resources like upjack://context and upjack://skills/*.
Publishing: Upjack apps are MCPB bundles. Use mpak to package and distribute them (
npx @nimblebrain/mpak run @yourorg/my-notes-app).
How It Works
You write: Upjack generates:
┌─────────────────┐ ┌─────────────────────────────┐
│ schemas/ │ │ MCP Tools │
│ contact.json │──────────▶│ create_contact │
│ deal.json │ │ get_contact, list_contacts │
└─────────────────┘ │ update_contact │
│ search_contacts │
┌─────────────────┐ │ delete_contact │
│ skills/ │──────────▶│ ... (× every entity type) │
│ lead-qual.md │ ├─────────────────────────────┤
└─────────────────┘ │ MCP Resources │
│ upjack://context │
┌─────────────────┐ │ upjack://skills/* │
│ manifest.json │──────────▶├─────────────────────────────┤
│ entities │ │ Storage & Validation │
│ hooks │ │ JSON files + JSON Schema │
│ schedules │ │ Prefixed ULID IDs │
└─────────────────┘ └─────────────────────────────┘
Three Tiers
| Tier | What You Write | What upjack Provides | |------|---------------|---------------------------| | *Schemas + Skills
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
100.4kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
97.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
86.2kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
75.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
