# Graft > Graft is an open-source CMS that keeps content as Markdown files in Git, checks every file against a TypeScript schema, and gives your app fully typed reads. AI agents can edit the same content through the Model Context Protocol (MCP), within limits you set. - Helping someone who doesn't code make a site? Read /start.md first. - Every page below is also available as Markdown at the same path with a .md suffix. - The whole corpus in one file: /llms-full.txt - Source and issues: https://github.com/AndersonDesign1/graft ## Get started - [What is Graft](https://graft.page/docs/what-is-graft.md): An open-source CMS that keeps your content in Git, types it with your schema, and lets AI agents edit it safely. - [Getting started](https://graft.page/docs/getting-started.md): Create a Graft project, compile content, and read it back typed. - [How Graft works](https://graft.page/docs/the-model.md): Where your content lives, what compiling does, and the one schema that checks everything. - [Set up a site for someone](https://graft.page/docs/start.md): For a coding agent helping a person who doesn't code: what to ask, what to run, and how to explain each step. - [Storage engines](https://graft.page/docs/tiers.md): Where your content index lives: a SQLite file with nothing to run, or Postgres when users write data at runtime. ## Frameworks - [Next.js](https://graft.page/docs/next.md): Read typed content in Next.js 15 or 16, with the App Router or the Pages Router, render MDX, and refresh only the pages that changed. - [Astro](https://graft.page/docs/astro.md): Read Graft content in Astro page frontmatter, ship no client JavaScript, and serve functions from Astro routes. - [SvelteKit](https://graft.page/docs/sveltekit.md): Read Graft content in SvelteKit server load functions and serve functions from +server.ts routes. - [TanStack Start](https://graft.page/docs/tanstack-start.md): Read Graft content in TanStack Start through server functions, never in isomorphic loaders. - [React Router](https://graft.page/docs/react-router.md): Read Graft content in React Router framework mode loaders and serve functions from resource routes. - [React](https://graft.page/docs/react.md): Read Graft content from browser React code with hooks that call the Content API. ## Content - [Schema](https://graft.page/docs/schema.md): Describe the fields of each kind of content once, and get checked files, checked inputs, and typed reads from it. - [Reading content](https://graft.page/docs/reading-content.md): Get one document, list a collection, or search it, with the same three typed calls in every framework. - [Search](https://graft.page/docs/search.md): Add full-text search to your site, with ranked results and highlighted snippets, and no search service to run. - [Assets](https://graft.page/docs/assets.md): Store images and other files in S3-compatible storage, reference them from content, and turn them into URLs in your app. - [Owned primitives](https://graft.page/docs/owned-primitives.md): Add ready-made features such as comments, SEO fields, or a product catalog as source code you own and can change. - [Studio](https://graft.page/docs/studio.md): An editor for people who would rather not edit files: find, create, edit and publish content in a browser, with every change kept in Git or the database. - [MDX safety](https://graft.page/docs/mdx-safety.md): MDX can run code. Graft refuses the parts that run by default, so anyone who can write content cannot run code on your server. - [Content in the database](https://graft.page/docs/content-in-the-database.md): Keep your content in Postgres so editors publish live with no rebuild and no GitHub setup, while developers pull it into files and push changes back. ## Runtime data - [Operational data](https://graft.page/docs/operational-data.md): Store data your users create at runtime, such as form submissions, orders, and comments, and read it back safely. - [Functions & access](https://graft.page/docs/functions-and-access.md): Write server code that reads or changes your users' data, call it over HTTP, and control who may call it. - [Auth](https://graft.page/docs/auth.md): Tell Graft who is calling your functions and MCP endpoint, using the login system your app already has. - [Rate limits](https://graft.page/docs/rate-limits.md): Stop a script from flooding a public function by limiting how often each caller can run it, with no extra service to run. - [Audit & approvals](https://graft.page/docs/audit-and-approvals.md): See who ran what, and make destructive actions wait for a person to approve them. ## Agents & MCP - [Agents overview](https://graft.page/docs/agent-surface.md): What an AI agent can do in a Graft project, how it connects, and the limits that keep it safe. - [Connecting agents](https://graft.page/docs/connecting-agents.md): Connect Claude Code, Cursor, or any MCP client to your Graft project, on your machine or over HTTP, and control what it may do. - [MCP tools](https://graft.page/docs/mcp-tools.md): All eighteen tools, what each one needs, and the annotations and output schemas a client can rely on. - [MCP resources & prompts](https://graft.page/docs/mcp-resources-and-prompts.md): Attach documents to an agent's conversation, and start ready-made workflows filled in from your project. - [Public docs MCP](https://graft.page/docs/docs-mcp.md): A second, read-only MCP endpoint for your documentation, separate from the private one. ## Deploy & operate - [Deploy](https://graft.page/docs/deploy.md): Ship a static Graft site with your app, or run Graft on Postgres inside your app or as its own server, on your own infrastructure. - [Hardening](https://graft.page/docs/hardening.md): Give your deployed app a database login that can serve your site but can never approve its own destructive actions. - [Branching & previews](https://graft.page/docs/branching-previews.md): Preview content changes on a branch, show them to reviewers, then merge. Production stays untouched until you do. - [Migrations](https://graft.page/docs/migrations.md): Change your schema without breaking content and data written in the old shape: rewrite files, update rows, and record what ran. - [Observability](https://graft.page/docs/observability.md): Trace a user's problem to the exact call, see what each compile changed, and check that your deployment is healthy. - [Powered by Graft](https://graft.page/docs/powered-by-graft.md): A copy-paste badge for a README or footer. No package to install. - [Host Studio for your team](https://graft.page/docs/studio-hosting.md): Run Studio on a server so editors can sign in, draft and publish from a browser, with every change landing in Git on GitHub. ## Reference - [CLI reference](https://graft.page/docs/cli-reference.md): Every graft command, its arguments and flags, grouped by task. 56 commands. - [Script the CLI](https://graft.page/docs/cli.md): Read graft's output from a script or an agent: JSON on stdout, errors as JSON on stderr, and an exit code that says what kind of failure it was. - [SDK reference](https://graft.page/docs/sdk-reference.md): Every Graft SDK package, what each one adds, how to mount Graft routes, cache tags, and where the frameworks differ. - [Configuration](https://graft.page/docs/configuration.md): Environment variables for compile, serve, auth, MCP, and assets. - [Content API](https://graft.page/docs/content-api.md): Serve your content over HTTP to frontends that cannot open the index themselves, with the same typed reads on the other end. - [Studio API](https://graft.page/docs/studio-api.md): Every Studio action as an HTTP call you can script: routes, scopes, the checks on changes, and mounting it yourself. - [Error reference](https://graft.page/docs/errors.md): Every Graft error code, what it means, and how to recover. 50 codes. - [Glossary](https://graft.page/docs/glossary.md): Plain definitions of the terms used across the Graft docs, each linked to the page that covers it. - [Upgrading](https://graft.page/docs/upgrading.md): Move a project to the latest Graft beta, with every breaking change since 0.x and what to change for each. - [Changelog](https://graft.page/docs/changelog.md): Every change in every Graft release, newest first, with the packages it touched. Dependency-only updates are left out.