docs: add react-auth, react-openapi, vet sites; update standards registry and MCP setup

This commit is contained in:
2026-10-19 13:47:00 +05:30
parent a4f428b451
commit bd6fca43aa
258 changed files with 28653 additions and 51 deletions

View File

@@ -827,6 +827,20 @@ can read a library's full API by connecting to its MCP and reading
<td><code>:8010</code></td>
</tr>
<tr>
<td>React Auth</td>
<td><code>react-auth</code></td>
<td>JWT-backed React auth UI: provider, login page, profile screens, bearer axios client</td>
<td>hand-rolled auth contexts and token handling in React apps</td>
<td><code>:8011</code></td>
</tr>
<tr>
<td>React OpenAPI</td>
<td><code>react-openapi</code></td>
<td>Spec-driven React admin UI (CRUD, tables, forms, SSE) derived from an OpenAPI document</td>
<td>per-resource hand-written admin screens</td>
<td><code>:8012</code></td>
</tr>
<tr>
<td>Auth Server</td>
<td><em>(service)</em></td>
<td>Central identity service (register/login/me/logout/introspect)</td>
@@ -880,6 +894,14 @@ can read a library's full API by connecting to its MCP and reading
<td>generate React/TypeScript documentation</td>
<td>Doc Weaver</td>
</tr>
<tr>
<td>authenticate a React front-end</td>
<td>React Auth (+ Auth Server)</td>
</tr>
<tr>
<td>build a React admin UI from an OpenAPI spec</td>
<td>React OpenAPI</td>
</tr>
</tbody>
</table>
<h2 id="discovery">Discovery</h2>
@@ -903,6 +925,10 @@ any infrastructure.</p>
JSDoc comments and emits a TypeDoc site plus the same doc-forge-shaped MCP
bundle for React packages. Its convention is <strong>RDFC</strong> (the React Doc-forge
Convention), the JSDoc parallel to GSDFC.</li>
<li><strong>React Auth</strong> and <strong>React OpenAPI</strong> are front-end libraries (TypeScript,
React 18 + MUI + React Router peers), not Python services — they consume the
<strong>Auth Server</strong> and an OpenAPI document rather than serving one. Each ships
a wiki, a TypeDoc site and an MCP bundle like every other library above.</li>
<li>Library MCP servers expose <strong>documentation resources</strong> (not executable tools):
they tell an agent the available API surface so it does not invent code.</li>
</ul>

File diff suppressed because one or more lines are too long

View File

@@ -74,6 +74,22 @@
"capabilities": ["docs", "documentation", "typedoc", "mcp", "jsdoc", "rdfc", "react", "typescript"],
"mcp": { "server": "doc-weaver", "port": 8010 }
},
{
"name": "React Auth",
"import": "react-auth",
"purpose": "JWT-backed React authentication UI: AuthProvider context, login/register screen, profile screens, and a bearer-token axios client.",
"use_instead_of": "hand-written auth contexts, login forms, and per-request token handling in React apps",
"capabilities": ["react", "auth", "login", "register", "jwt", "token", "frontend", "ui", "profile", "axios"],
"mcp": { "server": "react-auth", "port": 8011 }
},
{
"name": "React OpenAPI",
"import": "react-openapi",
"purpose": "Spec-driven React admin UI that derives CRUD routes, tables, forms, foreign-key selects and SSE streams from an OpenAPI document at runtime.",
"use_instead_of": "hand-written resource screens, CRUD forms and admin tables for each backend resource",
"capabilities": ["react", "openapi", "admin", "crud", "ui", "frontend", "spec", "sse", "forms", "datatable"],
"mcp": { "server": "react-openapi", "port": 8012 }
},
{
"name": "Auth Server",
"import": null,

View File

@@ -2,7 +2,7 @@
"module": "library_registry",
"content": {
"path": "library_registry",
"docstring": "# Library Registry\n\n## Summary\n\nThe Aetos ecosystem provides internal libraries for the shared concerns of\nevery application. **Use them.** Writing a private copy of any capability below\nis a defect.\n\nEach library also exposes its own documentation as an MCP server. An AI agent\ncan read a library's full API by connecting to its MCP and reading\n`docs://index`, `docs://nav`, and `docs://modules/{module}`.\n\n---\n\n## Catalog\n\n| Library | Import | Purpose | Use instead of | MCP |\n|---|---|---|---|---|\n| DAG Pipe | `dagpipe` | Deterministic state-transformation DAG engine | hand-rolled orchestration/topological ordering | `:8006` |\n| Hexa | `hexa` | Declarative DI / composition-root tooling | manual wiring, hand-written factories | `:8008` |\n| Mongo Ops | `mongo_ops` | Async MongoDB repositories, cache, populate, transactions | raw Motor CRUD and connection lifecycle | `:8007` |\n| Omniread | `omniread` | Format-agnostic fetch + parse (HTML, PDF, CSV, XLSX) | custom scrapers/parsers | `:8003` |\n| OpenAPI First | `openapi_first` | Spec-first FastAPI bootstrap, client, codegen | decorator routers and hand-written clients | `:8004` |\n| Mail Intake | `mail_intake` | Provider-agnostic read-only email ingestion | Gmail OAuth + MIME parsing | `:8002` |\n| Py JWT | `jwtlib` | JWT auth primitives (register/login/introspect) | password hashing + token code | `:8005` |\n| Doc Forge | `docforge` | Docstring compiler → MkDocs + MCP docs | custom doc generators | `:8001` |\n| Doc Weaver | `doc-weaver` | JSDoc compiler → TypeDoc + MCP docs (React/TS) | custom TypeScript doc generators | `:8010` |\n| Auth Server | *(service)* | Central identity service (register/login/me/logout/introspect) | building auth endpoints yourself | spec: `docs://spec` |\n\n## How to choose\n\n| You need to… | Use |\n|---|---|\n| persist and query documents | Mongo Ops |\n| compose dependencies | Hexa |\n| run a multi-step transformation | DAG Pipe |\n| read/parse an arbitrary input format | Omniread |\n| expose a contract-first HTTP API | OpenAPI First |\n| ingest email | Mail Intake |\n| authenticate users / verify tokens | Py JWT (+ Auth Server) |\n| generate documentation | Doc Forge |\n| generate React/TypeScript documentation | Doc Weaver |\n\n## Discovery\n\nA single **standards MCP** exposes `find_library(capability)`, which returns the\nmatching library, its import name, its \"use instead of\" guidance, and its MCP\nendpoint (or, for the auth-server service, a spec pointer). It also serves the\npinned auth-server OpenAPI contract at `docs://spec`. Query it before writing\nany infrastructure.\n\n## Notes\n\n- **Hexa** is a full library with its own MCP server on `:8008`: read\n `docs://index`, `docs://nav`, and `docs://modules/{module}` (e.g.\n `docs://modules/hexa.container`) to discover the DI surface — `build(cls, *,\n instances, config)` and the `PortNode` model.\n- **Auth Server** is a **service**, not an importable library: it has no MCP\n bundle by design. Read its client contract from the pinned OpenAPI document\n via `docs://spec` and wire it by declaring a `bearerAuth` security scheme in\n the app's own spec (see **Auth Integration**); `py-jwt` covers the\n low-level token path.\n- **Doc Weaver** is the TypeScript counterpart to **Doc Forge**: it reads\n JSDoc comments and emits a TypeDoc site plus the same doc-forge-shaped MCP\n bundle for React packages. Its convention is **RDFC** (the React Doc-forge\n Convention), the JSDoc parallel to GSDFC.\n- Library MCP servers expose **documentation resources** (not executable tools):\n they tell an agent the available API surface so it does not invent code.\n",
"docstring": "# Library Registry\n\n## Summary\n\nThe Aetos ecosystem provides internal libraries for the shared concerns of\nevery application. **Use them.** Writing a private copy of any capability below\nis a defect.\n\nEach library also exposes its own documentation as an MCP server. An AI agent\ncan read a library's full API by connecting to its MCP and reading\n`docs://index`, `docs://nav`, and `docs://modules/{module}`.\n\n---\n\n## Catalog\n\n| Library | Import | Purpose | Use instead of | MCP |\n|---|---|---|---|---|\n| DAG Pipe | `dagpipe` | Deterministic state-transformation DAG engine | hand-rolled orchestration/topological ordering | `:8006` |\n| Hexa | `hexa` | Declarative DI / composition-root tooling | manual wiring, hand-written factories | `:8008` |\n| Mongo Ops | `mongo_ops` | Async MongoDB repositories, cache, populate, transactions | raw Motor CRUD and connection lifecycle | `:8007` |\n| Omniread | `omniread` | Format-agnostic fetch + parse (HTML, PDF, CSV, XLSX) | custom scrapers/parsers | `:8003` |\n| OpenAPI First | `openapi_first` | Spec-first FastAPI bootstrap, client, codegen | decorator routers and hand-written clients | `:8004` |\n| Mail Intake | `mail_intake` | Provider-agnostic read-only email ingestion | Gmail OAuth + MIME parsing | `:8002` |\n| Py JWT | `jwtlib` | JWT auth primitives (register/login/introspect) | password hashing + token code | `:8005` |\n| Doc Forge | `docforge` | Docstring compiler → MkDocs + MCP docs | custom doc generators | `:8001` |\n| Doc Weaver | `doc-weaver` | JSDoc compiler → TypeDoc + MCP docs (React/TS) | custom TypeScript doc generators | `:8010` |\n| React Auth | `react-auth` | JWT-backed React auth UI: provider, login page, profile screens, bearer axios client | hand-rolled auth contexts and token handling in React apps | `:8011` |\n| React OpenAPI | `react-openapi` | Spec-driven React admin UI (CRUD, tables, forms, SSE) derived from an OpenAPI document | per-resource hand-written admin screens | `:8012` |\n| Auth Server | *(service)* | Central identity service (register/login/me/logout/introspect) | building auth endpoints yourself | spec: `docs://spec` |\n\n## How to choose\n\n| You need to… | Use |\n|---|---|\n| persist and query documents | Mongo Ops |\n| compose dependencies | Hexa |\n| run a multi-step transformation | DAG Pipe |\n| read/parse an arbitrary input format | Omniread |\n| expose a contract-first HTTP API | OpenAPI First |\n| ingest email | Mail Intake |\n| authenticate users / verify tokens | Py JWT (+ Auth Server) |\n| generate documentation | Doc Forge |\n| generate React/TypeScript documentation | Doc Weaver |\n| authenticate a React front-end | React Auth (+ Auth Server) |\n| build a React admin UI from an OpenAPI spec | React OpenAPI |\n\n## Discovery\n\nA single **standards MCP** exposes `find_library(capability)`, which returns the\nmatching library, its import name, its \"use instead of\" guidance, and its MCP\nendpoint (or, for the auth-server service, a spec pointer). It also serves the\npinned auth-server OpenAPI contract at `docs://spec`. Query it before writing\nany infrastructure.\n\n## Notes\n\n- **Hexa** is a full library with its own MCP server on `:8008`: read\n `docs://index`, `docs://nav`, and `docs://modules/{module}` (e.g.\n `docs://modules/hexa.container`) to discover the DI surface — `build(cls, *,\n instances, config)` and the `PortNode` model.\n- **Auth Server** is a **service**, not an importable library: it has no MCP\n bundle by design. Read its client contract from the pinned OpenAPI document\n via `docs://spec` and wire it by declaring a `bearerAuth` security scheme in\n the app's own spec (see **Auth Integration**); `py-jwt` covers the\n low-level token path.\n- **Doc Weaver** is the TypeScript counterpart to **Doc Forge**: it reads\n JSDoc comments and emits a TypeDoc site plus the same doc-forge-shaped MCP\n bundle for React packages. Its convention is **RDFC** (the React Doc-forge\n Convention), the JSDoc parallel to GSDFC.\n- **React Auth** and **React OpenAPI** are front-end libraries (TypeScript,\n React 18 + MUI + React Router peers), not Python services — they consume the\n **Auth Server** and an OpenAPI document rather than serving one. Each ships\n a wiki, a TypeDoc site and an MCP bundle like every other library above.\n- Library MCP servers expose **documentation resources** (not executable tools):\n they tell an agent the available API surface so it does not invent code.\n",
"objects": {}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -25,6 +25,8 @@ can read a library's full API by connecting to its MCP and reading
| Py JWT | `jwtlib` | JWT auth primitives (register/login/introspect) | password hashing + token code | `:8005` |
| Doc Forge | `docforge` | Docstring compiler → MkDocs + MCP docs | custom doc generators | `:8001` |
| Doc Weaver | `doc-weaver` | JSDoc compiler → TypeDoc + MCP docs (React/TS) | custom TypeScript doc generators | `:8010` |
| React Auth | `react-auth` | JWT-backed React auth UI: provider, login page, profile screens, bearer axios client | hand-rolled auth contexts and token handling in React apps | `:8011` |
| React OpenAPI | `react-openapi` | Spec-driven React admin UI (CRUD, tables, forms, SSE) derived from an OpenAPI document | per-resource hand-written admin screens | `:8012` |
| Auth Server | *(service)* | Central identity service (register/login/me/logout/introspect) | building auth endpoints yourself | spec: `docs://spec` |
## How to choose
@@ -40,6 +42,8 @@ can read a library's full API by connecting to its MCP and reading
| authenticate users / verify tokens | Py JWT (+ Auth Server) |
| generate documentation | Doc Forge |
| generate React/TypeScript documentation | Doc Weaver |
| authenticate a React front-end | React Auth (+ Auth Server) |
| build a React admin UI from an OpenAPI spec | React OpenAPI |
## Discovery
@@ -64,5 +68,9 @@ any infrastructure.
JSDoc comments and emits a TypeDoc site plus the same doc-forge-shaped MCP
bundle for React packages. Its convention is **RDFC** (the React Doc-forge
Convention), the JSDoc parallel to GSDFC.
- **React Auth** and **React OpenAPI** are front-end libraries (TypeScript,
React 18 + MUI + React Router peers), not Python services — they consume the
**Auth Server** and an OpenAPI document rather than serving one. Each ships
a wiki, a TypeDoc site and an MCP bundle like every other library above.
- Library MCP servers expose **documentation resources** (not executable tools):
they tell an agent the available API surface so it does not invent code.

View File

@@ -69,8 +69,9 @@ nav:
- Home: index.md
- Overview: 01_overview.md
- App Components: 02_components.md
- Start an App: 03_start_an_app.md
- MCP:
- Start an App: 03_start_an_app.md
- UI + API Reference: 06_ui_api_reference.md
- MCP:
- Setup: 05_mcp_setup.md
- Testing & Quality: 04_development/01_testing.md
- Releasing & Versioning: 04_development/02_releasing.md

View File

@@ -40,10 +40,14 @@ From the `docs` checkout:
| `mongo-ops` | `mongo_ops` | 8007 | `http://localhost:8007/mcp` | `https://mcp.aetoskia.com/mongo-ops/mcp` |
| `hexa` | `hexa` | 8008 | `http://localhost:8008/mcp` | `https://mcp.aetoskia.com/hexa/mcp` |
| `doc-weaver` | `doc-weaver` | 8010 | `http://localhost:8010/mcp` | `https://mcp.aetoskia.com/doc-weaver/mcp` |
| `react-auth` | `react-auth` | 8011 | `http://localhost:8011/mcp` | `https://mcp.aetoskia.com/react-auth/mcp` |
| `react-openapi` | `react-openapi` | 8012 | `http://localhost:8012/mcp` | `https://mcp.aetoskia.com/react-openapi/mcp` |
| `vet` | `vet` | 8013 | `http://localhost:8013/mcp` | `https://mcp.aetoskia.com/vet/mcp` |
The hosted endpoints are served over HTTPS at `https://mcp.aetoskia.com/<slug>/mcp`.
The tabs below are linked (`content.tabs.link`): switching one switches all of
them. Every snippet registers **all ten** servers, so a single paste is enough.
them. Every snippet registers **all thirteen** servers, so a single paste is
enough.
---
@@ -66,7 +70,10 @@ entry with a `url` but no `type` is read as a stdio server and skipped.
"dagpipe": { "type": "http", "url": "http://localhost:8006/mcp" },
"mongo-ops": { "type": "http", "url": "http://localhost:8007/mcp" },
"hexa": { "type": "http", "url": "http://localhost:8008/mcp" },
"doc-weaver": { "type": "http", "url": "http://localhost:8010/mcp" }
"doc-weaver": { "type": "http", "url": "http://localhost:8010/mcp" },
"react-auth": { "type": "http", "url": "http://localhost:8011/mcp" },
"react-openapi": { "type": "http", "url": "http://localhost:8012/mcp" },
"vet": { "type": "http", "url": "http://localhost:8013/mcp" }
}
}
```
@@ -85,7 +92,10 @@ entry with a `url` but no `type` is read as a stdio server and skipped.
"dagpipe": { "type": "http", "url": "https://mcp.aetoskia.com/dagpipe/mcp" },
"mongo-ops": { "type": "http", "url": "https://mcp.aetoskia.com/mongo-ops/mcp" },
"hexa": { "type": "http", "url": "https://mcp.aetoskia.com/hexa/mcp" },
"doc-weaver": { "type": "http", "url": "https://mcp.aetoskia.com/doc-weaver/mcp" }
"doc-weaver": { "type": "http", "url": "https://mcp.aetoskia.com/doc-weaver/mcp" },
"react-auth": { "type": "http", "url": "https://mcp.aetoskia.com/react-auth/mcp" },
"react-openapi": { "type": "http", "url": "https://mcp.aetoskia.com/react-openapi/mcp" },
"vet": { "type": "http", "url": "https://mcp.aetoskia.com/vet/mcp" }
}
}
```
@@ -131,6 +141,15 @@ Or add them with the CLI:
[mcp_servers.doc-weaver]
url = "http://localhost:8010/mcp"
[mcp_servers.react-auth]
url = "http://localhost:8011/mcp"
[mcp_servers.react-openapi]
url = "http://localhost:8012/mcp"
[mcp_servers.vet]
url = "http://localhost:8013/mcp"
```
=== "mcp.aetoskia.com"
@@ -165,6 +184,15 @@ Or add them with the CLI:
[mcp_servers.doc-weaver]
url = "https://mcp.aetoskia.com/doc-weaver/mcp"
[mcp_servers.react-auth]
url = "https://mcp.aetoskia.com/react-auth/mcp"
[mcp_servers.react-openapi]
url = "https://mcp.aetoskia.com/react-openapi/mcp"
[mcp_servers.vet]
url = "https://mcp.aetoskia.com/vet/mcp"
```
Or add them with the CLI:
@@ -192,7 +220,10 @@ Or add them with the CLI:
"dagpipe": { "serverUrl": "http://localhost:8006/mcp" },
"mongo-ops": { "serverUrl": "http://localhost:8007/mcp" },
"hexa": { "serverUrl": "http://localhost:8008/mcp" },
"doc-weaver": { "serverUrl": "http://localhost:8010/mcp" }
"doc-weaver": { "serverUrl": "http://localhost:8010/mcp" },
"react-auth": { "serverUrl": "http://localhost:8011/mcp" },
"react-openapi": { "serverUrl": "http://localhost:8012/mcp" },
"vet": { "serverUrl": "http://localhost:8013/mcp" }
}
}
```
@@ -211,7 +242,10 @@ Or add them with the CLI:
"dagpipe": { "serverUrl": "https://mcp.aetoskia.com/dagpipe/mcp" },
"mongo-ops": { "serverUrl": "https://mcp.aetoskia.com/mongo-ops/mcp" },
"hexa": { "serverUrl": "https://mcp.aetoskia.com/hexa/mcp" },
"doc-weaver": { "serverUrl": "https://mcp.aetoskia.com/doc-weaver/mcp" }
"doc-weaver": { "serverUrl": "https://mcp.aetoskia.com/doc-weaver/mcp" },
"react-auth": { "serverUrl": "https://mcp.aetoskia.com/react-auth/mcp" },
"react-openapi": { "serverUrl": "https://mcp.aetoskia.com/react-openapi/mcp" },
"vet": { "serverUrl": "https://mcp.aetoskia.com/vet/mcp" }
}
}
```
@@ -237,7 +271,10 @@ Or add them with the CLI:
"dagpipe": { "type": "remote", "url": "http://localhost:8006/mcp", "enabled": true },
"mongo-ops": { "type": "remote", "url": "http://localhost:8007/mcp", "enabled": true },
"hexa": { "type": "remote", "url": "http://localhost:8008/mcp", "enabled": true },
"doc-weaver": { "type": "remote", "url": "http://localhost:8010/mcp", "enabled": true }
"doc-weaver": { "type": "remote", "url": "http://localhost:8010/mcp", "enabled": true },
"react-auth": { "type": "remote", "url": "http://localhost:8011/mcp", "enabled": true },
"react-openapi": { "type": "remote", "url": "http://localhost:8012/mcp", "enabled": true },
"vet": { "type": "remote", "url": "http://localhost:8013/mcp", "enabled": true }
}
}
```
@@ -257,7 +294,10 @@ Or add them with the CLI:
"dagpipe": { "type": "remote", "url": "https://mcp.aetoskia.com/dagpipe/mcp", "enabled": true },
"mongo-ops": { "type": "remote", "url": "https://mcp.aetoskia.com/mongo-ops/mcp", "enabled": true },
"hexa": { "type": "remote", "url": "https://mcp.aetoskia.com/hexa/mcp", "enabled": true },
"doc-weaver": { "type": "remote", "url": "https://mcp.aetoskia.com/doc-weaver/mcp", "enabled": true }
"doc-weaver": { "type": "remote", "url": "https://mcp.aetoskia.com/doc-weaver/mcp", "enabled": true },
"react-auth": { "type": "remote", "url": "https://mcp.aetoskia.com/react-auth/mcp", "enabled": true },
"react-openapi": { "type": "remote", "url": "https://mcp.aetoskia.com/react-openapi/mcp", "enabled": true },
"vet": { "type": "remote", "url": "https://mcp.aetoskia.com/vet/mcp", "enabled": true }
}
}
```
@@ -287,7 +327,10 @@ Client Configuration → Copy HTTP Stream Config**.
"dagpipe": { "url": "http://localhost:8006/mcp" },
"mongo-ops": { "url": "http://localhost:8007/mcp" },
"hexa": { "url": "http://localhost:8008/mcp" },
"doc-weaver": { "url": "http://localhost:8010/mcp" }
"doc-weaver": { "url": "http://localhost:8010/mcp" },
"react-auth": { "url": "http://localhost:8011/mcp" },
"react-openapi": { "url": "http://localhost:8012/mcp" },
"vet": { "url": "http://localhost:8013/mcp" }
}
}
```
@@ -306,7 +349,10 @@ Client Configuration → Copy HTTP Stream Config**.
"dagpipe": { "url": "https://mcp.aetoskia.com/dagpipe/mcp" },
"mongo-ops": { "url": "https://mcp.aetoskia.com/mongo-ops/mcp" },
"hexa": { "url": "https://mcp.aetoskia.com/hexa/mcp" },
"doc-weaver": { "url": "https://mcp.aetoskia.com/doc-weaver/mcp" }
"doc-weaver": { "url": "https://mcp.aetoskia.com/doc-weaver/mcp" },
"react-auth": { "url": "https://mcp.aetoskia.com/react-auth/mcp" },
"react-openapi": { "url": "https://mcp.aetoskia.com/react-openapi/mcp" },
"vet": { "url": "https://mcp.aetoskia.com/vet/mcp" }
}
}
```

View File

@@ -0,0 +1,115 @@
# UI + API Reference
The vet application is the reference implementation of the **UI + API
pattern**: a spec-first backend (`react/vet/server`) paired with a
react-openapi frontend (`react/vet`) that renders itself directly from the
backend's OpenAPI document. Everything about the pairing — auth, persistence,
uploads, SSE — is driven from `openapi.yaml`.
---
## Architecture
```
react/vet/ # frontend (vite, react-openapi, react-auth)
src/
openapi-config.ts # reads VITE_API_BASE_URL + VITE_AUTH_BASE_URL
.env # VITE_API_BASE_URL=http://localhost:8020
react/vet/server/ # backend (OpenAPIFirstApp, port 8020)
openapi.yaml # single source of truth (24 operations)
domain/ # parents, vets, treatments, pets, appointments
infra/db/repos/ # IntIdMemoryRepository / IntIdMongoRepository
interfaces/ # one route module per resource + system (health)
```
The frontend's `specConfiguration` passes `specUrl` and `baseApiUrl` derived
from `VITE_API_BASE_URL`; `react-openapi` fetches `${base}/openapi.json` and
builds the admin UI from the `x-` extensions in the spec.
---
## Auth (bearer JWT)
`openapi.yaml` declares a single `bearerAuth` security scheme
(`type: http`, `bearerFormat: JWT`) with `x-server-url: "{AUTH_SERVER}"` and
`x-introspect-path: "/introspect"`. `openapi_first` resolves `{AUTH_SERVER}`
from the environment at app build time and generates a `Depends` that calls
the auth-server's `/introspect` endpoint per request. No hand-written auth
code exists in the backend.
The frontend uses `react-auth`'s `AuthProvider` and `AuthPage` gate; the API
client attaches `Authorization: Bearer <token>` via
`specConfiguration.getToken = () => tokenStore.get()`.
---
## Persistence (dual backend)
`REPO_BACKEND` selects the repository flavor:
| Value | Adapter | Notes |
| ------ | ---------------------------- | ------------------------------------------ |
| `memory` (default) | `IntIdMemoryRepository` | Process-local dict + counter; zero deps |
| `mongo` | `IntIdMongoRepository` | Motor via `MongoConnectionManager`; counter via `_counters` collection |
Both adapters expose the same duck-type (`create`, `get_by_id`, `get_many`,
`update`, `patch`, `delete`) consumed by the hexa-wired
`CrudsServiceAdaptor` services, so domain code and route handlers are
backend-agnostic. **Integer ids** are used end-to-end (the wire contract
declares `type: integer` primary keys); this is a documented deviation from
mongo-ops' default `ObjectId` allocation.
---
## Resource modelling
Every resource follows the same slice:
- `domain/<resource>/models.py` — plain pydantic models (`extra: "ignore"`)
- `domain/<resource>/ports/db.py` — `XDocument(X, BaseDocument)` + `create_x_repo()`
- `domain/<resource>/ports/service.py` — `XCrudsService(CrudsServiceAdaptor)` + `get_x_service(repo)`
- `interfaces/<resource>/routes.py` — handlers named after operationIds
Foreign keys are embedded objects on the wire (e.g. `Appointment.pet` is a
full `Pet`). Create/update handlers accept either a bare id or an expanded
object and normalize through `expand_ref` / `expand_ref_list` before
persisting. Unresolvable references return `422`.
---
## Non-CRUD surface
- **File upload** — `POST /pets/{id}/photo` (multipart) writes to
`UPLOADS_DIR` and stores the path on the pet document.
- **SSE** — `GET /pets/{id}/actions` returns `text/event-stream` with random
species-scoped behaviors (see `infra/adapters/actions_stream.py`).
- **Health** — `GET /health` is public (`security: []`) and used by the
Docker healthcheck.
---
## Running
```bash
cd react/vet/server
python -m venv .venv && .venv\Scripts\pip install -e .[dev]
AUTH_SERVER=https://auth.aetoskia.com REPO_BACKEND=memory .venv\Scripts\uvicorn main:app --port 8020
```
The frontend (`react/vet`) reads `VITE_API_BASE_URL` from `.env` and proxies
nothing — CORS is open (`allow_origins=["*"]`) in `main.py`.
---
## What the standards say
The backend follows the [Start an App](03_start_an_app.md) blueprint
(composition root, hexa wiring, `CrudsServiceAdaptor` services, spec-first
routing via `openapi_first`). The deviations are intentional and documented:
- **No worker/pipelines** — no background jobs for this app.
- **Integer-id repositories** — required by the wire contract; replaces the
ObjectId-based `mongo_ops.BaseRepository`.
- **Both persistence flavors** — memory (default, zero-dep) and Mongo
(production) selected via `REPO_BACKEND`.

View File

@@ -830,11 +830,33 @@ for an internal library instead of reimplementing one (see the
<td><code>http://localhost:8010/mcp</code></td>
<td><code>https://mcp.aetoskia.com/doc-weaver/mcp</code></td>
</tr>
<tr>
<td><code>react-auth</code></td>
<td><code>react-auth</code></td>
<td>8011</td>
<td><code>http://localhost:8011/mcp</code></td>
<td><code>https://mcp.aetoskia.com/react-auth/mcp</code></td>
</tr>
<tr>
<td><code>react-openapi</code></td>
<td><code>react-openapi</code></td>
<td>8012</td>
<td><code>http://localhost:8012/mcp</code></td>
<td><code>https://mcp.aetoskia.com/react-openapi/mcp</code></td>
</tr>
<tr>
<td><code>vet</code></td>
<td><code>vet</code></td>
<td>8013</td>
<td><code>http://localhost:8013/mcp</code></td>
<td><code>https://mcp.aetoskia.com/vet/mcp</code></td>
</tr>
</tbody>
</table>
<p>The hosted endpoints are served over HTTPS at <code>https://mcp.aetoskia.com/&lt;slug&gt;/mcp</code>.
The tabs below are linked (<code>content.tabs.link</code>): switching one switches all of
them. Every snippet registers <strong>all ten</strong> servers, so a single paste is enough.</p>
them. Every snippet registers <strong>all thirteen</strong> servers, so a single paste is
enough.</p>
<hr />
<h2 id="claude-code">🤖 Claude Code</h2>
<p>Project-scoped <code>.mcp.json</code> at the repo root. The <code>type</code> field is required — an
@@ -855,7 +877,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-1-11">11</a></span>
<span class="normal"><a href="#__codelineno-1-12">12</a></span>
<span class="normal"><a href="#__codelineno-1-13">13</a></span>
<span class="normal"><a href="#__codelineno-1-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-1-14">14</a></span>
<span class="normal"><a href="#__codelineno-1-15">15</a></span>
<span class="normal"><a href="#__codelineno-1-16">16</a></span>
<span class="normal"><a href="#__codelineno-1-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="p">{</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8009/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8001/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -866,9 +891,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8006/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8007/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8008/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14"></a><span class="p">}</span>
</span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8011/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8012/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-1-15"><a id="__codelineno-1-15" name="__codelineno-1-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8013/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-1-16"><a id="__codelineno-1-16" name="__codelineno-1-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-1-17"><a id="__codelineno-1-17" name="__codelineno-1-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
<div class="tabbed-block">
@@ -885,7 +913,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-2-11">11</a></span>
<span class="normal"><a href="#__codelineno-2-12">12</a></span>
<span class="normal"><a href="#__codelineno-2-13">13</a></span>
<span class="normal"><a href="#__codelineno-2-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-2-14">14</a></span>
<span class="normal"><a href="#__codelineno-2-15">15</a></span>
<span class="normal"><a href="#__codelineno-2-16">16</a></span>
<span class="normal"><a href="#__codelineno-2-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="p">{</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/standards/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-forge/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -896,9 +927,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-2-9"><a id="__codelineno-2-9" name="__codelineno-2-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/dagpipe/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-10"><a id="__codelineno-2-10" name="__codelineno-2-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/mongo-ops/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-11"><a id="__codelineno-2-11" name="__codelineno-2-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/hexa/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-12"><a id="__codelineno-2-12" name="__codelineno-2-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-2-13"><a id="__codelineno-2-13" name="__codelineno-2-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-2-14"><a id="__codelineno-2-14" name="__codelineno-2-14"></a><span class="p">}</span>
</span><span id="__span-2-12"><a id="__codelineno-2-12" name="__codelineno-2-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-13"><a id="__codelineno-2-13" name="__codelineno-2-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-auth/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-14"><a id="__codelineno-2-14" name="__codelineno-2-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-openapi/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-2-15"><a id="__codelineno-2-15" name="__codelineno-2-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/vet/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-2-16"><a id="__codelineno-2-16" name="__codelineno-2-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-2-17"><a id="__codelineno-2-17" name="__codelineno-2-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
</div>
@@ -939,7 +973,16 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-3-26">26</a></span>
<span class="normal"><a href="#__codelineno-3-27">27</a></span>
<span class="normal"><a href="#__codelineno-3-28">28</a></span>
<span class="normal"><a href="#__codelineno-3-29">29</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1"></a><span class="k">[mcp_servers.standards]</span>
<span class="normal"><a href="#__codelineno-3-29">29</a></span>
<span class="normal"><a href="#__codelineno-3-30">30</a></span>
<span class="normal"><a href="#__codelineno-3-31">31</a></span>
<span class="normal"><a href="#__codelineno-3-32">32</a></span>
<span class="normal"><a href="#__codelineno-3-33">33</a></span>
<span class="normal"><a href="#__codelineno-3-34">34</a></span>
<span class="normal"><a href="#__codelineno-3-35">35</a></span>
<span class="normal"><a href="#__codelineno-3-36">36</a></span>
<span class="normal"><a href="#__codelineno-3-37">37</a></span>
<span class="normal"><a href="#__codelineno-3-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1"></a><span class="k">[mcp_servers.standards]</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8009/mcp&quot;</span>
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3"></a>
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4"></a><span class="k">[mcp_servers.doc-forge]</span>
@@ -968,6 +1011,15 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-3-27"><a id="__codelineno-3-27" name="__codelineno-3-27"></a>
</span><span id="__span-3-28"><a id="__codelineno-3-28" name="__codelineno-3-28"></a><span class="k">[mcp_servers.doc-weaver]</span>
</span><span id="__span-3-29"><a id="__codelineno-3-29" name="__codelineno-3-29"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span>
</span><span id="__span-3-30"><a id="__codelineno-3-30" name="__codelineno-3-30"></a>
</span><span id="__span-3-31"><a id="__codelineno-3-31" name="__codelineno-3-31"></a><span class="k">[mcp_servers.react-auth]</span>
</span><span id="__span-3-32"><a id="__codelineno-3-32" name="__codelineno-3-32"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8011/mcp&quot;</span>
</span><span id="__span-3-33"><a id="__codelineno-3-33" name="__codelineno-3-33"></a>
</span><span id="__span-3-34"><a id="__codelineno-3-34" name="__codelineno-3-34"></a><span class="k">[mcp_servers.react-openapi]</span>
</span><span id="__span-3-35"><a id="__codelineno-3-35" name="__codelineno-3-35"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8012/mcp&quot;</span>
</span><span id="__span-3-36"><a id="__codelineno-3-36" name="__codelineno-3-36"></a>
</span><span id="__span-3-37"><a id="__codelineno-3-37" name="__codelineno-3-37"></a><span class="k">[mcp_servers.vet]</span>
</span><span id="__span-3-38"><a id="__codelineno-3-38" name="__codelineno-3-38"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8013/mcp&quot;</span>
</span></code></pre></div></td></tr></table></div>
</div>
<div class="tabbed-block">
@@ -999,7 +1051,16 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-4-26">26</a></span>
<span class="normal"><a href="#__codelineno-4-27">27</a></span>
<span class="normal"><a href="#__codelineno-4-28">28</a></span>
<span class="normal"><a href="#__codelineno-4-29">29</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="k">[mcp_servers.standards]</span>
<span class="normal"><a href="#__codelineno-4-29">29</a></span>
<span class="normal"><a href="#__codelineno-4-30">30</a></span>
<span class="normal"><a href="#__codelineno-4-31">31</a></span>
<span class="normal"><a href="#__codelineno-4-32">32</a></span>
<span class="normal"><a href="#__codelineno-4-33">33</a></span>
<span class="normal"><a href="#__codelineno-4-34">34</a></span>
<span class="normal"><a href="#__codelineno-4-35">35</a></span>
<span class="normal"><a href="#__codelineno-4-36">36</a></span>
<span class="normal"><a href="#__codelineno-4-37">37</a></span>
<span class="normal"><a href="#__codelineno-4-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="k">[mcp_servers.standards]</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/standards/mcp&quot;</span>
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3"></a>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4"></a><span class="k">[mcp_servers.doc-forge]</span>
@@ -1028,6 +1089,15 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-4-27"><a id="__codelineno-4-27" name="__codelineno-4-27"></a>
</span><span id="__span-4-28"><a id="__codelineno-4-28" name="__codelineno-4-28"></a><span class="k">[mcp_servers.doc-weaver]</span>
</span><span id="__span-4-29"><a id="__codelineno-4-29" name="__codelineno-4-29"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span>
</span><span id="__span-4-30"><a id="__codelineno-4-30" name="__codelineno-4-30"></a>
</span><span id="__span-4-31"><a id="__codelineno-4-31" name="__codelineno-4-31"></a><span class="k">[mcp_servers.react-auth]</span>
</span><span id="__span-4-32"><a id="__codelineno-4-32" name="__codelineno-4-32"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-auth/mcp&quot;</span>
</span><span id="__span-4-33"><a id="__codelineno-4-33" name="__codelineno-4-33"></a>
</span><span id="__span-4-34"><a id="__codelineno-4-34" name="__codelineno-4-34"></a><span class="k">[mcp_servers.react-openapi]</span>
</span><span id="__span-4-35"><a id="__codelineno-4-35" name="__codelineno-4-35"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-openapi/mcp&quot;</span>
</span><span id="__span-4-36"><a id="__codelineno-4-36" name="__codelineno-4-36"></a>
</span><span id="__span-4-37"><a id="__codelineno-4-37" name="__codelineno-4-37"></a><span class="k">[mcp_servers.vet]</span>
</span><span id="__span-4-38"><a id="__codelineno-4-38" name="__codelineno-4-38"></a><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/vet/mcp&quot;</span>
</span></code></pre></div></td></tr></table></div>
</div>
</div>
@@ -1055,7 +1125,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-5-11">11</a></span>
<span class="normal"><a href="#__codelineno-5-12">12</a></span>
<span class="normal"><a href="#__codelineno-5-13">13</a></span>
<span class="normal"><a href="#__codelineno-5-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-5-14">14</a></span>
<span class="normal"><a href="#__codelineno-5-15">15</a></span>
<span class="normal"><a href="#__codelineno-5-16">16</a></span>
<span class="normal"><a href="#__codelineno-5-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="p">{</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8009/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8001/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -1066,9 +1139,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-5-9"><a id="__codelineno-5-9" name="__codelineno-5-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8006/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-10"><a id="__codelineno-5-10" name="__codelineno-5-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8007/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-11"><a id="__codelineno-5-11" name="__codelineno-5-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8008/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-12"><a id="__codelineno-5-12" name="__codelineno-5-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-5-13"><a id="__codelineno-5-13" name="__codelineno-5-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-5-14"><a id="__codelineno-5-14" name="__codelineno-5-14"></a><span class="p">}</span>
</span><span id="__span-5-12"><a id="__codelineno-5-12" name="__codelineno-5-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-13"><a id="__codelineno-5-13" name="__codelineno-5-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8011/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-14"><a id="__codelineno-5-14" name="__codelineno-5-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8012/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-5-15"><a id="__codelineno-5-15" name="__codelineno-5-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8013/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-5-16"><a id="__codelineno-5-16" name="__codelineno-5-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-5-17"><a id="__codelineno-5-17" name="__codelineno-5-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
<div class="tabbed-block">
@@ -1085,7 +1161,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-6-11">11</a></span>
<span class="normal"><a href="#__codelineno-6-12">12</a></span>
<span class="normal"><a href="#__codelineno-6-13">13</a></span>
<span class="normal"><a href="#__codelineno-6-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-6-14">14</a></span>
<span class="normal"><a href="#__codelineno-6-15">15</a></span>
<span class="normal"><a href="#__codelineno-6-16">16</a></span>
<span class="normal"><a href="#__codelineno-6-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="p">{</span>
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/standards/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-forge/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -1096,9 +1175,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/dagpipe/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/mongo-ops/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-11"><a id="__codelineno-6-11" name="__codelineno-6-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/hexa/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-12"><a id="__codelineno-6-12" name="__codelineno-6-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-6-13"><a id="__codelineno-6-13" name="__codelineno-6-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-6-14"><a id="__codelineno-6-14" name="__codelineno-6-14"></a><span class="p">}</span>
</span><span id="__span-6-12"><a id="__codelineno-6-12" name="__codelineno-6-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-13"><a id="__codelineno-6-13" name="__codelineno-6-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-auth/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-14"><a id="__codelineno-6-14" name="__codelineno-6-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-openapi/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-6-15"><a id="__codelineno-6-15" name="__codelineno-6-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;serverUrl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/vet/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-6-16"><a id="__codelineno-6-16" name="__codelineno-6-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-6-17"><a id="__codelineno-6-17" name="__codelineno-6-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
</div>
@@ -1123,7 +1205,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-7-12">12</a></span>
<span class="normal"><a href="#__codelineno-7-13">13</a></span>
<span class="normal"><a href="#__codelineno-7-14">14</a></span>
<span class="normal"><a href="#__codelineno-7-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-7-15">15</a></span>
<span class="normal"><a href="#__codelineno-7-16">16</a></span>
<span class="normal"><a href="#__codelineno-7-17">17</a></span>
<span class="normal"><a href="#__codelineno-7-18">18</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1"></a><span class="p">{</span>
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2"></a><span class="w"> </span><span class="nt">&quot;$schema&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://opencode.ai/config.json&quot;</span><span class="p">,</span>
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3"></a><span class="w"> </span><span class="nt">&quot;mcp&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8009/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
@@ -1135,9 +1220,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-7-10"><a id="__codelineno-7-10" name="__codelineno-7-10"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8006/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-11"><a id="__codelineno-7-11" name="__codelineno-7-11"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8007/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-12"><a id="__codelineno-7-12" name="__codelineno-7-12"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8008/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-13"><a id="__codelineno-7-13" name="__codelineno-7-13"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-7-14"><a id="__codelineno-7-14" name="__codelineno-7-14"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-7-15"><a id="__codelineno-7-15" name="__codelineno-7-15"></a><span class="p">}</span>
</span><span id="__span-7-13"><a id="__codelineno-7-13" name="__codelineno-7-13"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-14"><a id="__codelineno-7-14" name="__codelineno-7-14"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8011/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-15"><a id="__codelineno-7-15" name="__codelineno-7-15"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8012/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-7-16"><a id="__codelineno-7-16" name="__codelineno-7-16"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8013/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-7-17"><a id="__codelineno-7-17" name="__codelineno-7-17"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-7-18"><a id="__codelineno-7-18" name="__codelineno-7-18"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
<div class="tabbed-block">
@@ -1155,7 +1243,10 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
<span class="normal"><a href="#__codelineno-8-12">12</a></span>
<span class="normal"><a href="#__codelineno-8-13">13</a></span>
<span class="normal"><a href="#__codelineno-8-14">14</a></span>
<span class="normal"><a href="#__codelineno-8-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-8-15">15</a></span>
<span class="normal"><a href="#__codelineno-8-16">16</a></span>
<span class="normal"><a href="#__codelineno-8-17">17</a></span>
<span class="normal"><a href="#__codelineno-8-18">18</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="p">{</span>
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="w"> </span><span class="nt">&quot;$schema&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://opencode.ai/config.json&quot;</span><span class="p">,</span>
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3"></a><span class="w"> </span><span class="nt">&quot;mcp&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/standards/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
@@ -1167,9 +1258,12 @@ entry with a <code>url</code> but no <code>type</code> is read as a stdio server
</span><span id="__span-8-10"><a id="__codelineno-8-10" name="__codelineno-8-10"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/dagpipe/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-11"><a id="__codelineno-8-11" name="__codelineno-8-11"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/mongo-ops/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-12"><a id="__codelineno-8-12" name="__codelineno-8-12"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/hexa/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-13"><a id="__codelineno-8-13" name="__codelineno-8-13"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-8-14"><a id="__codelineno-8-14" name="__codelineno-8-14"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-8-15"><a id="__codelineno-8-15" name="__codelineno-8-15"></a><span class="p">}</span>
</span><span id="__span-8-13"><a id="__codelineno-8-13" name="__codelineno-8-13"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-14"><a id="__codelineno-8-14" name="__codelineno-8-14"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-auth/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-15"><a id="__codelineno-8-15" name="__codelineno-8-15"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-openapi/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-8-16"><a id="__codelineno-8-16" name="__codelineno-8-16"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;remote&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/vet/mcp&quot;</span><span class="p">,</span><span class="w"> </span><span class="nt">&quot;enabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-8-17"><a id="__codelineno-8-17" name="__codelineno-8-17"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-8-18"><a id="__codelineno-8-18" name="__codelineno-8-18"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
</div>
@@ -1197,7 +1291,10 @@ Client Configuration → Copy HTTP Stream Config</strong>.</p>
<span class="normal"><a href="#__codelineno-9-11">11</a></span>
<span class="normal"><a href="#__codelineno-9-12">12</a></span>
<span class="normal"><a href="#__codelineno-9-13">13</a></span>
<span class="normal"><a href="#__codelineno-9-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-9-14">14</a></span>
<span class="normal"><a href="#__codelineno-9-15">15</a></span>
<span class="normal"><a href="#__codelineno-9-16">16</a></span>
<span class="normal"><a href="#__codelineno-9-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="p">{</span>
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8009/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8001/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -1208,9 +1305,12 @@ Client Configuration → Copy HTTP Stream Config</strong>.</p>
</span><span id="__span-9-9"><a id="__codelineno-9-9" name="__codelineno-9-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8006/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-10"><a id="__codelineno-9-10" name="__codelineno-9-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8007/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-11"><a id="__codelineno-9-11" name="__codelineno-9-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8008/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-12"><a id="__codelineno-9-12" name="__codelineno-9-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-9-13"><a id="__codelineno-9-13" name="__codelineno-9-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-9-14"><a id="__codelineno-9-14" name="__codelineno-9-14"></a><span class="p">}</span>
</span><span id="__span-9-12"><a id="__codelineno-9-12" name="__codelineno-9-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8010/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-13"><a id="__codelineno-9-13" name="__codelineno-9-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8011/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-14"><a id="__codelineno-9-14" name="__codelineno-9-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8012/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-9-15"><a id="__codelineno-9-15" name="__codelineno-9-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:8013/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-9-16"><a id="__codelineno-9-16" name="__codelineno-9-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-9-17"><a id="__codelineno-9-17" name="__codelineno-9-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
<div class="tabbed-block">
@@ -1227,7 +1327,10 @@ Client Configuration → Copy HTTP Stream Config</strong>.</p>
<span class="normal"><a href="#__codelineno-10-11">11</a></span>
<span class="normal"><a href="#__codelineno-10-12">12</a></span>
<span class="normal"><a href="#__codelineno-10-13">13</a></span>
<span class="normal"><a href="#__codelineno-10-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="p">{</span>
<span class="normal"><a href="#__codelineno-10-14">14</a></span>
<span class="normal"><a href="#__codelineno-10-15">15</a></span>
<span class="normal"><a href="#__codelineno-10-16">16</a></span>
<span class="normal"><a href="#__codelineno-10-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="p">{</span>
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2"></a><span class="w"> </span><span class="nt">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3"></a><span class="w"> </span><span class="nt">&quot;standards&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/standards/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-4"><a id="__codelineno-10-4" name="__codelineno-10-4"></a><span class="w"> </span><span class="nt">&quot;doc-forge&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-forge/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
@@ -1238,9 +1341,12 @@ Client Configuration → Copy HTTP Stream Config</strong>.</p>
</span><span id="__span-10-9"><a id="__codelineno-10-9" name="__codelineno-10-9"></a><span class="w"> </span><span class="nt">&quot;dagpipe&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/dagpipe/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-10"><a id="__codelineno-10-10" name="__codelineno-10-10"></a><span class="w"> </span><span class="nt">&quot;mongo-ops&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/mongo-ops/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-11"><a id="__codelineno-10-11" name="__codelineno-10-11"></a><span class="w"> </span><span class="nt">&quot;hexa&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/hexa/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-12"><a id="__codelineno-10-12" name="__codelineno-10-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-10-13"><a id="__codelineno-10-13" name="__codelineno-10-13"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-10-14"><a id="__codelineno-10-14" name="__codelineno-10-14"></a><span class="p">}</span>
</span><span id="__span-10-12"><a id="__codelineno-10-12" name="__codelineno-10-12"></a><span class="w"> </span><span class="nt">&quot;doc-weaver&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/doc-weaver/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-13"><a id="__codelineno-10-13" name="__codelineno-10-13"></a><span class="w"> </span><span class="nt">&quot;react-auth&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-auth/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-14"><a id="__codelineno-10-14" name="__codelineno-10-14"></a><span class="w"> </span><span class="nt">&quot;react-openapi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/react-openapi/mcp&quot;</span><span class="w"> </span><span class="p">},</span>
</span><span id="__span-10-15"><a id="__codelineno-10-15" name="__codelineno-10-15"></a><span class="w"> </span><span class="nt">&quot;vet&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://mcp.aetoskia.com/vet/mcp&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-10-16"><a id="__codelineno-10-16" name="__codelineno-10-16"></a><span class="w"> </span><span class="p">}</span>
</span><span id="__span-10-17"><a id="__codelineno-10-17" name="__codelineno-10-17"></a><span class="p">}</span>
</span></code></pre></div></td></tr></table></div>
</div>
</div>

File diff suppressed because one or more lines are too long