Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export default withMermaid(
domain: "https://docs.tailor.tech",
title: "Tailor Platform Documentation",
description:
"Tailor is a headless ERP platform. These docs cover the SDK, AppShell UI framework, platform services (TailorDB, Resolver, StateFlow, Executor, Auth), and administration.",
"Tailor is a headless ERP platform. These docs cover the SDK, AppShell UI framework, platform services (TailorDB, Resolver, StateFlow, Executor, Auth), and administration. AI assistants can search and read these docs through the Tailor MCP server at https://mcp.tailor.tech/ (Streamable HTTP, no authentication; tools: search_knowledge, list_knowledge, fetch_knowledge). See https://docs.tailor.tech/guides/integration/mcp for setup.",
injectLLMHint: false,
}),
],
Expand Down
1 change: 1 addition & 0 deletions .vitepress/config/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,5 @@ export const acronyms: Record<string, string> = {
csv: "CSV",
scim: "SCIM",
spa: "SPA",
mcp: "MCP",
};
75 changes: 75 additions & 0 deletions .vitepress/theme/components/McpInstallButtons.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<script setup lang="ts">
import { computed } from "vue";

const props = defineProps({
name: { type: String, default: "tailor-mcp" },
url: { type: String, default: "https://mcp.tailor.tech/" },
});

// Cursor reads the same object it would put under `mcpServers` in mcp.json,
// base64-encoded. A remote server is just `{ url }`.
const cursorLink = computed(() => {
const config = btoa(JSON.stringify({ url: props.url }));
return `cursor://anysphere.cursor-deeplink/mcp/install?name=${encodeURIComponent(props.name)}&config=${config}`;
});

// VS Code takes the `servers` entry shape, URL-encoded. The https redirect
// works from any browser and hands off to the installed VS Code.
const vscodeLink = computed(() => {
const config = encodeURIComponent(JSON.stringify({ type: "http", url: props.url }));
return `https://insiders.vscode.dev/redirect/mcp/install?name=${encodeURIComponent(props.name)}&config=${config}`;
});
</script>

<template>
<div class="mcp-install">
<a class="mcp-install-btn" :href="cursorLink">Add to Cursor</a>
<a class="mcp-install-btn" :href="vscodeLink" target="_blank" rel="noopener noreferrer"
>Add to VS Code</a
>
<code class="mcp-install-url">{{ url }}</code>
</div>
</template>

<style scoped>
.mcp-install {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px;
margin: 16px 0 24px;
}

.mcp-install-btn {
display: inline-flex;
align-items: center;
padding: 6px 14px;
border: 1px solid var(--vp-c-brand-1);
border-radius: 8px;
background: var(--vp-c-brand-1);
color: #fff;
font-size: 0.9rem;
font-weight: 600;
text-decoration: none;
transition:
background 0.2s ease,
border-color 0.2s ease;
}

.mcp-install-btn:hover {
background: var(--vp-c-brand-2);
border-color: var(--vp-c-brand-2);
color: #fff;
text-decoration: none;
}

.mcp-install-url {
padding: 4px 10px;
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
background: var(--vp-c-bg-soft);
color: var(--vp-c-text-1);
font-size: 0.85rem;
user-select: all;
}
</style>
2 changes: 2 additions & 0 deletions .vitepress/theme/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import GitHubIcon from "./components/icons/GitHubIcon.vue";
import Tag from "./components/Tag.vue";
import DeprecatedTag from "./components/DeprecatedTag.vue";
import PreviewTag from "./components/PreviewTag.vue";
import McpInstallButtons from "./components/McpInstallButtons.vue";

// Tailor brand theme styles (order matters!)
import "./styles/vars.css"; // Brand colors & CSS variables (must be first)
Expand All @@ -32,6 +33,7 @@ const theme: Theme = {
app.component("Tag", Tag);
app.component("DeprecatedTag", DeprecatedTag);
app.component("PreviewTag", PreviewTag);
app.component("McpInstallButtons", McpInstallButtons);
},
setup() {
const { page } = useData();
Expand Down
9 changes: 7 additions & 2 deletions .vitepress/theme/styles/vars.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
--vp-c-brand-1: #535ae8; /* tailorBlue - primary brand color */
--vp-c-brand-2: #7981e2; /* tailorMid - secondary */
--vp-c-brand-3: #c6ccf4; /* tailorLight - accent */
--vp-c-brand-soft: #535ae8;
--vp-c-brand-soft: rgba(
83,
90,
232,
0.14
); /* tip/note background; must stay translucent so brand-colored links remain readable */

/* Text colors */
--vp-c-text-1: #21245c; /* tailorBlack - headings & primary text */
Expand Down Expand Up @@ -41,7 +46,7 @@
--vp-c-brand-1: #7981e2; /* tailorMid for dark mode */
--vp-c-brand-2: #9891ff; /* lighter purple */
--vp-c-brand-3: #c6ccf4;
--vp-c-brand-soft: #7981e2;
--vp-c-brand-soft: rgba(121, 129, 226, 0.16);

/* Text colors */
--vp-c-text-1: #ffffff;
Expand Down
4 changes: 4 additions & 0 deletions docs/guides/integration/claude.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ Tailor Platform exposes a remote MCP server for each application (currently in p

By registering your Tailor PF app as a remote MCP server in Claude or Claude Code, you can let them read and write your application data through the same OAuth2-authenticated GraphQL API used by your other clients.

::: tip Looking for the documentation server?
This page is about the per-application server that reads and writes **your data**. The public [Tailor MCP server](/guides/integration/mcp) at `https://mcp.tailor.tech/` gives AI assistants **these docs** instead, needs no authentication, and works alongside the per-app server.
:::

## Prerequisites

- A deployed Tailor PF application reachable at `https://{YOUR_APP_SUBDOMAIN}.erp.dev`
Expand Down
143 changes: 143 additions & 0 deletions docs/guides/integration/mcp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
---
doc_type: guide
---

# Give AI Assistants the Tailor Platform Docs with MCP

## Overview

Tailor runs a public [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server at `https://mcp.tailor.tech/`. Connect it to Claude, ChatGPT, Claude Code, Cursor, VS Code, Codex, or any other MCP client, and the assistant can search and read this documentation while it helps you build on Tailor Platform.

<McpInstallButtons />

The server is read-only, needs no account or token, and only serves the content of `docs.tailor.tech`. It never sees your application data. To let an assistant query or change data in one of your applications, use the per-application server described in [Integrate Claude and Claude Code with Tailor Platform](/guides/integration/claude). The two work side by side.

## Connect a client

Every client below needs the same two values:

| Setting | Value |
| --------- | -------------------------- |
| URL | `https://mcp.tailor.tech/` |
| Transport | Streamable HTTP |
| Auth | None |

The examples name the server `tailor-mcp`. Pick any name you like.

### Claude

Search for **Tailor** in the connectors directory and add it. On Team and Enterprise plans an Owner enables it under **Organization settings > Connectors**. On Pro and Max plans open **Customize > Connectors**.

If the directory is not available to you, choose **Add custom connector** and enter `https://mcp.tailor.tech/` as the remote MCP server URL. Leave the OAuth fields empty.

### ChatGPT

Open **Settings > Apps**, search the directory for **Tailor**, and add it. ChatGPT then calls the server whenever a conversation touches Tailor Platform.

On Business, Enterprise, and Edu workspaces an admin enables it first under **Workspace settings > Apps > Directory**. Members then add it from their own **Settings > Apps**.

### Claude Code

Add it for your user:

```bash
claude mcp add --transport http tailor-mcp https://mcp.tailor.tech/
```

Or add it to the project so everyone who clones the repository gets it. This writes `.mcp.json` at the project root:

```bash
claude mcp add --transport http --scope project tailor-mcp https://mcp.tailor.tech/
```

```json
{
"mcpServers": {
"tailor-mcp": {
"type": "http",
"url": "https://mcp.tailor.tech/"
}
}
}
```

### Cursor

Click **Add to Cursor** above, or create `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` for all projects):

```json
{
"mcpServers": {
"tailor-mcp": {
"url": "https://mcp.tailor.tech/"
}
}
}
```

### VS Code

Click **Add to VS Code** above, or create `.vscode/mcp.json` in your project:

```json
{
"servers": {
"tailor-mcp": {
"type": "http",
"url": "https://mcp.tailor.tech/"
}
}
}
```

### Codex

```bash
codex mcp add tailor-mcp --url https://mcp.tailor.tech/
```

This is the same as adding the following to `~/.codex/config.toml`:

```toml
[mcp_servers.tailor-mcp]
url = "https://mcp.tailor.tech/"
```

### Other clients

Any client that supports remote MCP servers over Streamable HTTP can connect with the URL alone. No headers are required.

## What the assistant can do

The server exposes three tools. Assistants pick them on their own; you do not have to name them.

| Tool | What it does |
| ------------------ | -------------------------------------------------------------------------------------------------------------- |
| `search_knowledge` | Full-text search over the documentation. Returns matching pages with an excerpt and an `id`. |
| `list_knowledge` | The table of contents: every page with its `id`, title, section, and summary. |
| `fetch_knowledge` | The Markdown of one page by `id`. Long pages come back as an outline first; pass a `section` to read one part. |

Every result starts with the page URL so the assistant can cite it.

Prompts that work well once the server is connected:

- "How do I define a TailorDB type with a relationship to another type?"
- "What are the redirect URI requirements for a public OAuth2 client in Tailor Auth?"
- "Show me how AppShell file-based routing maps directories to pages."
- "Compare Executor triggers and StateFlow for reacting to record changes."

## Tell your coding agent to use it

Coding agents follow the instructions in your project. Add a line such as the following to `AGENTS.md` or `CLAUDE.md` so the agent reaches for the docs instead of guessing:

```markdown
For Tailor Platform questions (SDK, TailorDB, AppShell, Auth, Executor, StateFlow),
use the `tailor-mcp` MCP tools before answering. If they are not available, ask the
user to run `claude mcp add --transport http tailor-mcp https://mcp.tailor.tech/`.
```

## Notes

- The content is the same as the [Markdown export](https://docs.tailor.tech/llms.txt) of this site and updates when the docs do.
- The server is hosted in `asia-northeast1` and rate limited. It is meant for interactive assistants, not for bulk export; use the Markdown export for that.
- Tool names are stable, so you can refer to them in agent instructions.
3 changes: 2 additions & 1 deletion docs/guides/integration/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ This automated synchronization eliminates manual data entry and reduces errors,

## What you'll learn

In this guide, you'll learn how to integrate Tailor Platform with Shopify, QuickBooks, ShipStation, Loop, Claude, and Claude Code.
In this guide, you'll learn how to integrate Tailor Platform with Shopify, QuickBooks, ShipStation, Loop, and AI assistants such as Claude, ChatGPT, Claude Code, Cursor, and Codex.

- [Shopify using third-party integration tools](/guides/integration/pipedream-shopify) like [Zapier](https://zapier.com/) or [Pipedream](https://pipedream.com/)
- [Shopify through direct integration](/guides/integration/shopify) using triggers
- [QuickBooks](/guides/integration/quickbooks)
- [ShipStation](/guides/integration/shipstation)
- [Loop](/guides/integration/loopreturns)
- [Claude and Claude Code](/guides/integration/claude) via a remote MCP server
- [AI assistants and coding agents](/guides/integration/mcp) via the Tailor MCP server, which gives them these docs
5 changes: 4 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Get a workspace running and your first schema deployed.

## Build with Tailor

The two toolkits you'll use to build every app: define your backend, then build its frontend.
The toolkits you'll use to build every app: define your backend, build its frontend, and let your AI assistant read these docs.

<div class="cards-3">
<Card title="Tailor SDK" href="/sdk/">
Expand All @@ -69,6 +69,9 @@ The two toolkits you'll use to build every app: define your backend, then build
<Card title="AppShell" href="/app-shell/">
Ready-made UI components for your application's frontend.
</Card>
<Card title="AI assistants" href="/guides/integration/mcp">
Give Claude, ChatGPT, Cursor, and Codex these docs through the Tailor MCP server.
</Card>
</div>

</div>
Expand Down
10 changes: 10 additions & 0 deletions docs/public/.well-known/ai-catalog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"specVersion": "1.0",
"entries": [
{
"identifier": "urn:air:tailor.tech:mcp:mcp",
"type": "application/mcp-server-card+json",
"url": "https://mcp.tailor.tech/server-card"
}
]
}
7 changes: 7 additions & 0 deletions schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ links:
- www.npmjs.com
- sonner.emilkowal.ski
- tailortech.statuspage.io
- claude.ai
- claude.com
- modelcontextprotocol.io
- cursor.com
- code.visualstudio.com
- vscode.dev
- learn.chatgpt.com
blocked_domains: [] # block links to these domains

# Heading validation rules
Expand Down
Loading