Skip to content

Introduction

Upjack lets you build AI-powered applications by describing your domain instead of writing code. You write a JSON Schema for your data and Markdown for your domain expertise. Upjack gives you entity management, validation, search, and a complete MCP server — automatically.

from upjack import UpjackApp
app = UpjackApp.from_manifest("manifest.json")
contact = app.create_entity("contact", {"name": "Alice", "email": "alice@example.com"})
results = app.search_entities("contact", query="alice")

No API code. No database. No deployment config.

For each entity you define, Upjack provides:

  • 6 MCP tools per entitycreate_contact, get_contact, update_contact, list_contacts, search_contacts, delete_contact
  • Schema validation at every write — invalid data never hits storage
  • Type-prefixed IDsct_01HZ3QKB... tells you it’s a contact at a glance
  • Full-text search across all string fields
  • JSON file storage — plain files in a git-friendly directory structure
  • Skills as resources — your Markdown expertise files are served to the agent via upjack://skills/*

Define a contact entity schema and a lead-qualification skill in Markdown, and your AI agent immediately knows how to create contacts, qualify leads, and follow up — from two files.

Entity A typed data record with a JSON Schema. Every entity gets a type-prefixed ULID (for example, ct_01HZ3QKB... for contacts, dl_01HZ4RMN... for deals). Entities are stored as individual JSON files and validated at write time.

Skill A Markdown document encoding domain expertise — scoring rubrics, decision criteria, procedures. The AI agent reads skills and applies them through reasoning, the same way a new hire reads an onboarding doc.

Manifest A JSON declaration that wires entities to skills, defines hooks (react to data changes), schedules (cron triggers), views (named queries), and bundle dependencies (external tools declared by capability alias).

Bundle Dependency An external tool provider declared by alias (for example, email) with a compatibility contract (tools_used array). Switch providers by changing one line — skills and schemas stay the same.

Upjack meets you where you are. Most apps never leave Tier 1.

TierWhat You WriteWhat Upjack Provides
Schemas + SkillsJSON Schema + MarkdownEntity management, storage, validation
MCP Servercreate_server(manifest)Full MCP server with CRUD tools, resources
Custom ServerPython MCP server + custom logicEntity management + your custom tools

At the first tier, you write only declarative files and get a working application. At the second tier, a single function call wraps everything in an MCP server:

from upjack.server import create_server
mcp = create_server("manifest.json")
mcp.run()
# Tools: create_contact, get_contact, update_contact, list_contacts, search_contacts, delete_contact

At the third tier, you build a custom MCP server in Python and use Upjack’s entity management alongside your own tools.

You do not need deep knowledge of these to get started, but they are helpful context:

ConceptWhat It IsLearn More
JSON SchemaA standard for describing the shape of JSON data. Upjack uses it to define what each entity looks like.Getting Started
MCPModel 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
MCPBMCP 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
ULIDUniversally Unique Lexicographically Sortable Identifier — like a UUID but sortable by creation time. Upjack uses prefixed ULIDs as entity IDs.Spec
  • Quick Start — Install Upjack, scaffold an app, define an entity, and run it in under 5 minutes
  • Build a Todo App — A step-by-step tutorial walking through a complete application
  • Architecture — How Upjack works under the hood