From 77444ef5b0c8640aaf7f53db00aeab46c46f7e29 Mon Sep 17 00:00:00 2001 From: Travis Fischer Date: Fri, 27 Jun 2025 14:00:41 -0500 Subject: [PATCH] feat: docs docs docs --- docs/docs.json | 2 +- docs/media/example-usage.png | Bin 0 -> 55314 bytes docs/publishing/config/auth.mdx | 6 +- docs/publishing/config/caching.mdx | 2 +- docs/publishing/config/index.mdx | 2 +- docs/publishing/config/rate-limits.mdx | 5 +- docs/publishing/config/tool-config.mdx | 2 +- .../publishing/guides/existing-mcp-server.mdx | 351 ++++++++++++++++- .../guides/existing-openapi-service.mdx | 353 +++++++++++++++++- docs/publishing/origin/index.mdx | 2 +- docs/publishing/quickstart.mdx | 65 +++- readme.md | 1 + 12 files changed, 774 insertions(+), 17 deletions(-) create mode 100644 docs/media/example-usage.png diff --git a/docs/docs.json b/docs/docs.json index a02fc59d..04fd5807 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -75,7 +75,7 @@ }, { - "group": "Config", + "group": "Project Config", "pages": [ "publishing/config/index", "publishing/config/auth", diff --git a/docs/media/example-usage.png b/docs/media/example-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..a788b7eca78504a51288526a0ce3e9872e55ace9 GIT binary patch literal 55314 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μ~}J>ogy8B8@H$Luw) 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 WFE$RLSE}0qYnU6KGoqd$-TWUzpGzeG literal 0 HcmV?d00001 diff --git a/docs/publishing/config/auth.mdx b/docs/publishing/config/auth.mdx index e5d023a5..02a29d42 100644 --- a/docs/publishing/config/auth.mdx +++ b/docs/publishing/config/auth.mdx @@ -1,6 +1,6 @@ --- title: Auth -description: Configure auth for your product. +description: Configure auth for your project. --- Ship to production fast with Agentic's free, hosted authentication. Email & password, OAuth, GitHub, Google, Twitter, etc – if your origin API requires OAuth credentials, Agentic likely already supports it, and if not, [please let us know](/contact). @@ -12,9 +12,9 @@ Currently, Agentic supports the following auth providers: ## How it works -Your product's users will sign into Agentic, subscribe to your product using Stripe, and then be given an API key to use with their tool calls. +Your project's users will sign into Agentic, subscribe to your project using Stripe, and then be given an API key to use with their tool calls. -Agentic's MCP gateway will then track all usage of your product based on API keys. +Agentic's MCP gateway will then track all usage of your project based on API keys. See [Origin Metadata](/publishing/origin-metadata) for details on how Agentic's MCP gateway passes customer auth and subscription information to your origin server. diff --git a/docs/publishing/config/caching.mdx b/docs/publishing/config/caching.mdx index ed1da4bf..724f2158 100644 --- a/docs/publishing/config/caching.mdx +++ b/docs/publishing/config/caching.mdx @@ -1,6 +1,6 @@ --- title: Caching -description: Configure caching for your product's tools. +description: Configure caching for your project's tools. --- Opt-in to caching with familiar _cache-control_ and _stale-while-revalidate_ options. MCP tool calls include caching information in their _\_meta_ fields, providing parity with standard HTTP headers. diff --git a/docs/publishing/config/index.mdx b/docs/publishing/config/index.mdx index c53200d0..e790456b 100644 --- a/docs/publishing/config/index.mdx +++ b/docs/publishing/config/index.mdx @@ -1,6 +1,6 @@ --- title: Config Overview -description: Configuring your Agentic product. +description: Configuring your Agentic project. --- Every Agentic project needs a config file (`agentic.config.ts`, `agentic.config.js`, or `agentic.config.json`) to define the project's metadata, pricing, rate-limits, and any tool-specific behavior overrides. diff --git a/docs/publishing/config/rate-limits.mdx b/docs/publishing/config/rate-limits.mdx index b5f997ac..16e9a530 100644 --- a/docs/publishing/config/rate-limits.mdx +++ b/docs/publishing/config/rate-limits.mdx @@ -1,6 +1,6 @@ --- title: Rate Limits -description: Configure rate-limits for your product. +description: Configure rate-limits for your project. --- Agentic's durable rate-limiting is built on top of Cloudflare's global infrastructure. Customize the default rate-limits, change them based on a customer's pricing plan, or create custom tool-specific overrides. @@ -47,8 +47,7 @@ The default platform rate limit for `requests` is a limit of 1000 requests per m { enabled: true, interval: '1m', - limit: 1000, - mode: 'approximate' + limit: 1000 } ``` diff --git a/docs/publishing/config/tool-config.mdx b/docs/publishing/config/tool-config.mdx index 0f73914d..214ff14e 100644 --- a/docs/publishing/config/tool-config.mdx +++ b/docs/publishing/config/tool-config.mdx @@ -1,6 +1,6 @@ --- title: Tool Config -description: Configure tool-specific settings for your product. +description: Configure tool-specific settings for your project. --- `toolConfigs` is an optional array of tool configs which may be used to override the default gateway behavior for specific tools. diff --git a/docs/publishing/guides/existing-mcp-server.mdx b/docs/publishing/guides/existing-mcp-server.mdx index 597d119f..4e5d3b1a 100644 --- a/docs/publishing/guides/existing-mcp-server.mdx +++ b/docs/publishing/guides/existing-mcp-server.mdx @@ -1,6 +1,353 @@ --- title: Existing MCP Server -description: This guide shows how to publish an existing MCP server to Agentic's MCP Gateway. +description: This guide shows how to publish an existing MCP server to Agentic. --- -**TODO** + + **Prerequisite**: Please install [Node.js](https://nodejs.org) before + proceeding. + + +## 1. Install the Agentic CLI + + + +```bash npm +npm i -g @agentic/platform-cli +``` + +```bash pnpm +pnpm i -g @agentic/platform-cli +``` + +```bash bun +bun install -g @agentic/platform-cli +``` + +```bash yarn +yarn global add @agentic/platform-cli +``` + + + +## 2. Log in or create an account + + + + +The `agentic` CLI defaults to using GitHub for authentication. + +```bash +agentic login +``` + + + + +```bash +agentic login -e -p +# or +agentic signup -e -p -u +``` + + + + +## 3. Add an Agentic config to your project + + + Make sure your remote MCP server is deployed to a publicly accessible `https` + URL and that the URL supports the Streamable HTTP transport. + + + + + +First, install the `@agentic/platform` package as a dev dependency. + + + +```bash npm +npm i -save-dev @agentic/platform +``` + +```bash pnpm +pnpm add -D @agentic/platform +``` + +```bash bun +bun add -d @agentic/platform +``` + + + +This package exports a `defineConfig` function which makes your config fully-typed and adds nice autocomplete. + +Now, create an `agentic.config.ts` file in the root of your project's source. + +```ts agentic.config.ts +import { defineConfig } from '@agentic/platform' + +export default defineConfig({ + name: '', + description: '', + origin: { + type: 'mcp', + url: '' + } +}) +``` + + + + + +Create an `agentic.config.json` file in the root of your project's source. + +```json agentic.config.json +{ + "name": "", + "description": "", + "origin": { + "type": "mcp", + "url": "" + } +} +``` + + + + + +## 4. Deploy your project + +From the directory where your `agentic.config.ts` or `agentic.config.json` file is located, run: + +```bash +agentic deploy +``` + +Every time you make a change to your project, you can run `agentic deploy` which will create a new immutable preview deployment. These deployments will not affect any published products you may have until you publish them by running `agentic publish`. + + + You'll soon be able to configure a GitHub repository to automatically deploy + your project on changes. Please [let me know](/contact) if you'd like me to + prioritize this feature. + + + + The returned deployment will not have any information about the origin server, + because your origin server is considered hidden once deployed to Agentic's MCP + gateway. + + + + +```json +{ + "id": "depl_m2yl7dpdpc5xk8b3cwvuzkg3", + "createdAt": "2025-06-27 18:14:34.641308+00", + "updatedAt": "2025-06-27 18:14:34.641308+00", + "identifier": "@dev/search@b57dc301", + "hash": "b57dc301", + "published": false, + "description": "Official Google Search tool. Useful for finding up-to-date news and information about any topic.", + "readme": "", + "userId": "user_bhlpuiioipxilpuq7xaoh1ae", + "projectId": "proj_rxs9jorlwolc3seq8enqgrgc", + "tools": [ + { + "name": "search", + "description": "Uses Google Search to return the most relevant web pages for a given query. Useful for finding up-to-date news and information about any topic.", + "inputSchema": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "default": 5, + "description": "Number of results to return" + }, + "type": { + "enum": [ + "search", + "images", + "videos", + "places", + "news", + "shopping" + ], + "type": "string", + "default": "search", + "description": "Type of Google search to perform" + }, + "query": { + "type": "string", + "description": "Search query" + } + }, + "required": ["query"], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "outputSchema": { + "type": "object", + "properties": { + "news": {}, + "images": {}, + "places": {}, + "videos": {}, + "results": {}, + "shopping": {}, + "answerBox": {}, + "knowledgeGraph": {} + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "toolConfigs": [ + { + "name": "search", + "cacheControl": "public, max-age=60, s-maxage=60 stale-while-revalidate=10" + } + ], + "pricingPlans": [ + { + "name": "Free", + "slug": "free", + "rateLimit": { + "interval": 86400, + "limit": 10, + "mode": "approximate", + "enabled": true + }, + "lineItems": [ + { + "slug": "requests", + "usageType": "metered", + "billingScheme": "per_unit", + "unitAmount": 0 + } + ] + }, + { + "name": "Standard", + "slug": "standard", + "interval": "month", + "rateLimit": { + "interval": 1, + "limit": 100, + "mode": "approximate", + "enabled": true + }, + "lineItems": [ + { + "slug": "base", + "usageType": "licensed", + "amount": 1000 + }, + { + "slug": "requests", + "usageType": "metered", + "billingScheme": "tiered", + "tiersMode": "volume", + "tiers": [ + { + "unitAmount": 0, + "upTo": 1000 + }, + { + "unitAmount": 0.01, + "upTo": 50000 + }, + { + "unitAmount": 0.008, + "upTo": 500000 + }, + { + "unitAmount": 0.006, + "upTo": 2500000 + }, + { + "unitAmount": 0.005, + "upTo": "inf" + } + ] + } + ] + } + ], + "pricingIntervals": ["month"], + "defaultRateLimit": { + "interval": 60, + "limit": 1000, + "mode": "approximate", + "enabled": true + } +} +``` + + + +## 5. Test your deployment + +The easiest way to test your deployment is to visit it in your Agentic dashboard: `https://agentic.so/app/projects/`. + +This page will show all the tools available on your deployment and includes a GUI for how to call them with various MCP clients, TS LLM SDKs, Python LLM SDKs, and raw HTTP. + + + Example of calling an Agentic tool + + + + +This example uses the [@agentic/search](https://agentic.so/marketplace/projects/@agentic/search) project's `search` tool. You'll need to replace the project identifier, tool name, and tool arguments with your own, but otherwise, calling your deployment's tools should be pretty straightforward. + + + + +```bash +curl -X POST -H "Content-Type: application/json" -d '{ "query": "example google search" }' https://gateway.agentic.com/mcp/search/search +``` + + + + + +```bash +http -j https://gateway.agentic.com/mcp/search/search query='example google search' +``` + + + + + +## 6. Publish your deployment + +Publishing your deployment will make it publicly available to all Agentic users. This will also enable other users to subscribe to your product using Stripe subscriptions. + +```bash +agentic publish +``` + +The CLI will prompt you to confirm a `semver` version. + +Now, your project will be available at `https://agentic.so/marketplace/projects/`. + +## 7. (Optional) Submit your product to the public Agentic Marketplace + + + Your project will be a live, publicly available product after publishing, complete with all Stripe subscription resources. + +**But it will not be discoverable on the Agentic Marketplace by default.** + +I made this decision during the current beta in order to keep the Agentic Marketplace as high quality and curated as possible. + +If you'd like to submit your product to the Agentic Marketplace, please +[get in touch](/contact). + + diff --git a/docs/publishing/guides/existing-openapi-service.mdx b/docs/publishing/guides/existing-openapi-service.mdx index 918d1728..2b541e06 100644 --- a/docs/publishing/guides/existing-openapi-service.mdx +++ b/docs/publishing/guides/existing-openapi-service.mdx @@ -1,6 +1,355 @@ --- title: Existing OpenAPI Service -description: This guide shows how to publish an existing OpenAPI service to Agentic's MCP Gateway. +description: This guide shows how to publish an existing OpenAPI service to Agentic. --- -**TODO** + + **Prerequisite**: Please install [Node.js](https://nodejs.org) before + proceeding. + + +## 1. Install the Agentic CLI + + + +```bash npm +npm i -g @agentic/platform-cli +``` + +```bash pnpm +pnpm i -g @agentic/platform-cli +``` + +```bash bun +bun install -g @agentic/platform-cli +``` + +```bash yarn +yarn global add @agentic/platform-cli +``` + + + +## 2. Log in or create an account + + + + +The `agentic` CLI defaults to using GitHub for authentication. + +```bash +agentic login +``` + + + + +```bash +agentic login -e -p +# or +agentic signup -e -p -u +``` + + + + +## 3. Add an Agentic config to your project + + + Make sure your remote OpenAPI service is deployed to a publicly accessible + `https` URL, and that your OpenAPI spec is a valid 3.0 or 3.1 spec. + + + + + +First, install the `@agentic/platform` package as a dev dependency. + + + +```bash npm +npm i -save-dev @agentic/platform +``` + +```bash pnpm +pnpm add -D @agentic/platform +``` + +```bash bun +bun add -d @agentic/platform +``` + + + +This package exports a `defineConfig` function which makes your config fully-typed and adds nice autocomplete. + +Now, create an `agentic.config.ts` file in the root of your project's source. + +```ts agentic.config.ts +import { defineConfig } from '@agentic/platform' + +export default defineConfig({ + name: '', + description: '', + origin: { + type: 'openapi', + url: '', + spec: '' + } +}) +``` + + + + + +Create an `agentic.config.json` file in the root of your project's source. + +```json agentic.config.json +{ + "name": "", + "description": "", + "origin": { + "type": "openapi", + "url": "", + "spec": "" + } +} +``` + + + + + +## 4. Deploy your project + +From the directory where your `agentic.config.ts` or `agentic.config.json` file is located, run: + +```bash +agentic deploy +``` + +Every time you make a change to your project, you can run `agentic deploy` which will create a new immutable preview deployment. These deployments will not affect any published products you may have until you publish them by running `agentic publish`. + + + You'll soon be able to configure a GitHub repository to automatically deploy + your project on changes. Please [let me know](/contact) if you'd like me to + prioritize this feature. + + + + + + The returned deployment will not have any information about the origin server, + because your origin server is considered hidden once deployed to Agentic's MCP + gateway. + + +```json +{ + "id": "depl_m2yl7dpdpc5xk8b3cwvuzkg3", + "createdAt": "2025-06-27 18:14:34.641308+00", + "updatedAt": "2025-06-27 18:14:34.641308+00", + "identifier": "@dev/search@b57dc301", + "hash": "b57dc301", + "published": false, + "description": "Official Google Search tool. Useful for finding up-to-date news and information about any topic.", + "readme": "", + "userId": "user_bhlpuiioipxilpuq7xaoh1ae", + "projectId": "proj_rxs9jorlwolc3seq8enqgrgc", + "tools": [ + { + "name": "search", + "description": "Uses Google Search to return the most relevant web pages for a given query. Useful for finding up-to-date news and information about any topic.", + "inputSchema": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "default": 5, + "description": "Number of results to return" + }, + "type": { + "enum": [ + "search", + "images", + "videos", + "places", + "news", + "shopping" + ], + "type": "string", + "default": "search", + "description": "Type of Google search to perform" + }, + "query": { + "type": "string", + "description": "Search query" + } + }, + "required": ["query"], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "outputSchema": { + "type": "object", + "properties": { + "news": {}, + "images": {}, + "places": {}, + "videos": {}, + "results": {}, + "shopping": {}, + "answerBox": {}, + "knowledgeGraph": {} + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "toolConfigs": [ + { + "name": "search", + "cacheControl": "public, max-age=60, s-maxage=60 stale-while-revalidate=10" + } + ], + "pricingPlans": [ + { + "name": "Free", + "slug": "free", + "rateLimit": { + "interval": 86400, + "limit": 10, + "mode": "approximate", + "enabled": true + }, + "lineItems": [ + { + "slug": "requests", + "usageType": "metered", + "billingScheme": "per_unit", + "unitAmount": 0 + } + ] + }, + { + "name": "Standard", + "slug": "standard", + "interval": "month", + "rateLimit": { + "interval": 1, + "limit": 100, + "mode": "approximate", + "enabled": true + }, + "lineItems": [ + { + "slug": "base", + "usageType": "licensed", + "amount": 1000 + }, + { + "slug": "requests", + "usageType": "metered", + "billingScheme": "tiered", + "tiersMode": "volume", + "tiers": [ + { + "unitAmount": 0, + "upTo": 1000 + }, + { + "unitAmount": 0.01, + "upTo": 50000 + }, + { + "unitAmount": 0.008, + "upTo": 500000 + }, + { + "unitAmount": 0.006, + "upTo": 2500000 + }, + { + "unitAmount": 0.005, + "upTo": "inf" + } + ] + } + ] + } + ], + "pricingIntervals": ["month"], + "defaultRateLimit": { + "interval": 60, + "limit": 1000, + "mode": "approximate", + "enabled": true + } +} +``` + + + +## 5. Test your deployment + +The easiest way to test your deployment is to visit it in your Agentic dashboard: `https://agentic.so/app/projects/`. + +This page will show all the tools available on your deployment and includes a GUI for how to call them with various MCP clients, TS LLM SDKs, Python LLM SDKs, and raw HTTP. + + + Example of calling an Agentic tool + + + + +This example uses the [@agentic/search](https://agentic.so/marketplace/projects/@agentic/search) project's `search` tool. You'll need to replace the project identifier, tool name, and tool arguments with your own, but otherwise, calling your deployment's tools should be pretty straightforward. + + + + +```bash +curl -X POST -H "Content-Type: application/json" -d '{ "query": "example google search" }' https://gateway.agentic.com/mcp/search/search +``` + + + + + +```bash +http -j https://gateway.agentic.com/mcp/search/search query='example google search' +``` + + + + + +## 6. Publish your deployment + +Publishing your deployment will make it publicly available to all Agentic users. This will also enable other users to subscribe to your product using Stripe subscriptions. + +```bash +agentic publish +``` + +The CLI will prompt you to confirm a `semver` version. + +Now, your project will be available at `https://agentic.so/marketplace/projects/`. + +## 7. (Optional) Submit your product to the public Agentic Marketplace + + + Your project will be a live, publicly available product after publishing, complete with all Stripe subscription resources. + +**But it will not be discoverable on the Agentic Marketplace by default.** + +I made this decision during the current beta in order to keep the Agentic Marketplace as high quality and curated as possible. + +If you'd like to submit your product to the Agentic Marketplace, please +[get in touch](/contact). + + diff --git a/docs/publishing/origin/index.mdx b/docs/publishing/origin/index.mdx index 129ece3f..393bd7db 100644 --- a/docs/publishing/origin/index.mdx +++ b/docs/publishing/origin/index.mdx @@ -13,7 +13,7 @@ interested in hosting your origin server with Agentic's infrastructure, please Remote origin servers are important because they allow for maximum flexibility with how you author and host your MCP server or OpenAPI service. -By cleanly separating between Agentic's MCP gateway and your remote origin server, Agentic can support origin servers written in any language or frameworka and deployed to any cloud. +By cleanly separating between Agentic's MCP gateway and your remote origin server, Agentic supports origin servers written in any language or framework and deployed to any cloud. diff --git a/docs/publishing/quickstart.mdx b/docs/publishing/quickstart.mdx index e81b2e28..75998b98 100644 --- a/docs/publishing/quickstart.mdx +++ b/docs/publishing/quickstart.mdx @@ -1,6 +1,67 @@ --- title: Quick Start -description: Run one command to turn your existing MCP server or OpenAPI service into a paid MCP product. +description: Deploy your first MCP product to Agentic in minutes. --- -**TODO** +## Do you have an existing API? + + + + Quick start based on an existing MCP server. + + + + Quick start based on an existing OpenAPI service. + + + +## Create a new project from scratch + + + + + + Create a new MCP server and deploy it to Agentic using the TS `fastmcp` package. + + + + Create a new MCP server and deploy it to Agentic using `hono` and `@hono/mcp`. + + + + Create a new OpenAPI server and deploy it to Agentic (as an MCP product!) using `hono` and `@hono/zod-openapi`. + + + + + + + + + + + diff --git a/readme.md b/readme.md index 6c520641..01f1bbcb 100644 --- a/readme.md +++ b/readme.md @@ -42,6 +42,7 @@ - simplify `AgenticToolClient` and only require one package per TS LLM SDK - `createAISDKToolsFromIdentifier(projectIdentifier)` - add really strict free rate-limits to `@agentic/search` +- add urls to db models (projects, deployments, consumers) so CLI users can easily debug ## TODO: Post-MVP