API Connector Builder
affaan-m/ECC
Build a new API connector or provider by matching the target repo's existing integration pattern exactly.
A skill your agent uses when the user asks to add a connector, create a connector, implement a connector for a service, add a tool to a connector, update a connector tool, or asks about connector…
$ npx skills add modelguide/modelguide --skill mg-connector -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install modelguide/modelguide mg-connector --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mg-connector .claude/skills/mg-connector && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .claude/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connectorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add modelguide/modelguide --skill mg-connector -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install modelguide/modelguide mg-connector --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/mg-connector .agents/skills/mg-connector && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .agents/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add modelguide/modelguide --skill mg-connector -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install modelguide/modelguide mg-connector --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/mg-connector .cursor/skills/mg-connector && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .cursor/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/modelguide/modelguide.git --path .claude/skills/mg-connector--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add modelguide/modelguide --skill mg-connector -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install modelguide/modelguide mg-connector --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/mg-connector .gemini/skills/mg-connector && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .gemini/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install modelguide/modelguide mg-connectorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add modelguide/modelguide --skill mg-connector -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/mg-connector .github/skills/mg-connector && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .github/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add modelguide/modelguide --skill mg-connector -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install modelguide/modelguide mg-connector --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modelguide/modelguide.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/mg-connector .opencode/skills/mg-connector && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "mg-connector" agent skill from https://github.com/modelguide/modelguide/tree/main/.claude/skills/mg-connector into .opencode/skills/mg-connector/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mg-connector", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
mg-connectorA skill your agent uses when the user asks to add a connector, create a connector, implement a connector for a service, add a tool to a connector, update a connector tool, or asks about connector…
Mg Connector is an agent skill from modelguide/modelguide. Use when the user asks to add a connector, create a connector, implement a connector for a service, add a tool to a connector, update a connector tool, or asks about connector architecture. Trigger phrases include "add connector", "create connector", "new connector", "implement connector", "add tool to connector", "update connector tool", "connector architecture".
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Open-source voice agent orchestration framework - build production voice AI pipelines without vendor lock-in. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 554caa0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
makebunFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.test-service.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Mg Connector loads about 4.5k tokens when it runs. Until then it costs about 95 tokens; SKILL.md has 932 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from modelguide/modelguide at commit 554caa0, republished under its MIT licence (© modelguide). 932 words, ~4,458 tokens.
.claude/skills/mg-connector/SKILL.md (or your agent's skills folder).Guide for creating, extending, and maintaining connector modules in the ModelGuide platform. Connectors integrate external services (e-commerce, helpdesk, calendars) into the platform, exposing their capabilities as tools that AI agents invoke via MCP.
Before designing a full TypeScript connector module, check whether a mocked connector (ADR-013) is enough. Use the mocked path instead when:
In those cases, skip this skill entirely. Go straight to connectors.yaml with isMocked: true and inline tool definitions (see the mg-cli or build-agent skills — both have templates). The CLI upserts a connectors_catalog entry and inserts connector_tools rows with mock_response populated; executeTool() falls back to those payloads at runtime. No code, no deploy.
Use this skill when the connector must call a real backend at runtime.
Every connector lives at modelguide-api/src/features/connectors/catalog/{slug}/ and consists of exactly three files:
| File | Purpose |
|---|---|
client.ts | HTTP client factory bound to connector config. Custom error class + typed fetcher. |
handlers.ts | Tool execution functions. Each handler is wrapped in an error-handling HOF. |
index.ts | Manifest: connector metadata + tool definitions array. Default export is ConnectorManifest. |
code manifest → registry.ts → sync.ts → DB connectors_catalog
↓
org creates connector instance (with config/secrets)
↓
AI agent calls tool via MCP → handler executes with resolved configAll types are in modelguide-api/src/features/connectors/catalog/types.ts:
interface ToolExecutionContext {
config: Record<string, string>; // resolved config (secrets decrypted)
input: Record<string, unknown>; // validated tool input from MCP call
organizationId: string;
connectorId: string;
}
interface ToolExecutionResult {
success: boolean;
data?: Record<string, unknown>;
error?: string;
}
interface ConnectorToolDefinition {
catalog: CatalogTool; // metadata stored in DB
handler: (ctx: ToolExecutionContext) => Promise<ToolExecutionResult>;
}
interface ConfigFieldSchema {
type: "string" | "secret" | "number" | "boolean";
required: boolean;
description: string;
default?: string | number | boolean;
}
type ConnectorType = "api" | "webhook" | "database" | "messaging";
interface ConnectorManifest {
name: string; // Human-readable, e.g. "Medusa"
slug: string; // URL-safe unique ID, e.g. "medusa"
description: string;
connectorType: ConnectorType;
configSchema: Record<string, ConfigFieldSchema>;
authMethods: string[]; // e.g. ["api_key"], ["oauth2"], ["bearer_token"]
iconUrl: string;
tools: ConnectorToolDefinition[];
}CatalogTool (from @db/schema/core):
interface CatalogTool {
name: string; // Human-readable, e.g. "List Products"
description: string;
inputSchema: Record<string, unknown>; // JSON Schema
defaultRequiresConfirmation: boolean;
defaultTimeoutSeconds: number;
}If .modelguide/CONNECTOR_HANDOFF.md exists, read it first and use it as the
source of truth for the requested service, auth, operations, and requested org
connector slug. Only ask follow-up questions for missing details.
Ask the user for:
api | webhook | database | messagingapi_key, oauth2, bearer_token, etc.When this skill is invoked from /build-agent, update
.modelguide/CONNECTOR_HANDOFF.md in place instead of returning the result only
in prose.
Do not delete the original request fields. Preserve serviceName,
serviceSlug, requestedConnectorSlug, authModel, baseUrl, and
operations so build-agent can resume without losing the builder's API summary.
Minimum required fields on completion:
status: completed or status: blockedcatalogSlug — the new catalog connector slugconnectorSlug — the org connector instance slug to use in agents.yaml and sops.yamltoolSlugs — exact tool slugs exposed by the connectorconfigFields — objects with name, description, and required for each
non-secret field that connectors.yaml must providesecretFields — objects with field, name, and type for each secret
that mg setup will prompt forchangedFiles — exact repo file paths you modifiedverification — commands run, or (pending) if verification was skippedblocker — only when status: blockedImportant: catalogSlug and connectorSlug are different. catalogSlug
identifies the connector type in the global catalog. connectorSlug is the org
instance slug that becomes the MCP prefix at runtime. serviceSlug is only the
interview-time service identifier and must not be used as either of those final
slugs.
client.ts// modelguide-api/src/features/connectors/catalog/{slug}/client.ts
interface {Name}FetchOptions {
method?: string;
body?: Record<string, unknown>;
params?: Record<string, string | number | undefined>;
}
export class {Name}ApiError extends Error {
constructor(
public status: number,
public body: string,
) {
super(`{Name} API error ${status}: ${body}`);
this.name = "{Name}ApiError";
}
}
export type {Name}Fetcher = <T = unknown>(
path: string,
options?: {Name}FetchOptions,
) => Promise<T>;
export function create{Name}Fetcher(
config: Record<string, string>,
): {Name}Fetcher {
const baseUrl = config.baseUrl?.replace(/\/+$/, "");
if (!baseUrl) {
throw new Error("{Name} baseUrl is required");
}
const headers: Record<string, string> = {
"Content-Type": "application/json",
Accept: "application/json",
};
// Add auth headers based on the service's auth method
if (config.apiKey) {
headers["Authorization"] = `Bearer ${config.apiKey}`;
}
return async function fetch<T = unknown>(
path: string,
options?: {Name}FetchOptions,
): Promise<T> {
const { method = "GET", body, params } = options ?? {};
let url = `${baseUrl}${path}`;
if (params) {
const entries = Object.entries(params).filter(([, v]) => v !== undefined);
if (entries.length > 0) {
const qs = new URLSearchParams(entries.map(([k, v]) => [k, String(v)]));
url += `?${qs}`;
}
}
const response = await fetch(url, {
method,
headers,
body: body ? JSON.stringify(body) : undefined,
});
if (!response.ok) {
const text = await response.text();
throw new {Name}ApiError(response.status, text);
}
return response.json() as Promise<T>;
};
}Important: The inner function name must NOT shadow globalThis.fetch. Use a distinct name like {slug}Fetch (e.g. medusaFetch).
handlers.ts// modelguide-api/src/features/connectors/catalog/{slug}/handlers.ts
import type { ToolExecutionContext, ToolExecutionResult } from "../types";
import {
{Name}ApiError,
type {Name}Fetcher,
create{Name}Fetcher,
} from "./client";
function errorResult(err: unknown): ToolExecutionResult {
if (err instanceof {Name}ApiError) {
return { success: false, error: `{Name} API ${err.status}: ${err.body}` };
}
const message = err instanceof Error ? err.message : String(err);
return { success: false, error: message };
}
/**
* Wraps a handler so every tool gets a fetcher and consistent error handling.
*/
function with{Name}(
fn: (
fetcher: {Name}Fetcher,
ctx: ToolExecutionContext,
) => Promise<ToolExecutionResult>,
): (ctx: ToolExecutionContext) => Promise<ToolExecutionResult> {
return async function handler(ctx) {
try {
const fetcher = create{Name}Fetcher(ctx.config);
return await fn(fetcher, ctx);
} catch (err) {
return errorResult(err);
}
};
}
// Export one handler per tool:
export const listSomething = with{Name}(async (fetcher, ctx) => {
const input = ctx.input as { /* typed input */ };
const data = await fetcher<Record<string, unknown>>("/api/endpoint", {
params: { /* query params */ },
});
return { success: true, data };
});Rules:
{ success: false, error } via the wrapperctx.input to the expected shape matching the tool's inputSchemawith{Name}() wrapper for every exported handlerindex.ts// modelguide-api/src/features/connectors/catalog/{slug}/index.ts
import type { ConnectorManifest, ConnectorToolDefinition } from "../types";
import { listSomething } from "./handlers";
const tools: ConnectorToolDefinition[] = [
{
catalog: {
name: "List Something", // Human-readable
description: "Description of what this tool does",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "Search query" },
limit: { type: "integer", description: "Max results", minimum: 1, maximum: 100 },
},
required: [],
},
defaultRequiresConfirmation: false, // true for side effects
defaultTimeoutSeconds: 30, // 30 for reads, 60 for writes
},
handler: listSomething,
},
];
const {slug}Manifest: ConnectorManifest = {
name: "{Display Name}",
slug: "{slug}",
description: "...",
connectorType: "api",
configSchema: {
baseUrl: {
type: "string",
required: true,
description: "API base URL",
},
apiKey: {
type: "secret", // encrypted in secrets table
required: true,
description: "API key for authentication",
},
},
authMethods: ["api_key"],
iconUrl: "https://example.com/icon.svg",
tools,
};
export default {slug}Manifest;Add the new connector import to modelguide-api/src/features/connectors/catalog/registry.ts:
export async function loadAllManifests(): Promise<ConnectorManifest[]> {
const modules = await Promise.all([
import("./medusa/index"),
import("./{slug}/index"), // ← add new import here
]);
// ...
}Create modelguide-api/tests/unit/connectors/{slug}-handlers.test.ts:
import { afterAll, describe, expect, mock, test } from "bun:test";
import {
listSomething,
} from "@features/connectors/catalog/{slug}/handlers";
import type { ToolExecutionContext } from "@features/connectors/catalog/types";
const BASE_CONFIG: Record<string, string> = {
baseUrl: "https://api.test-service.com",
apiKey: "test_key_123",
};
function makeCtx(
input: Record<string, unknown> = {},
config = BASE_CONFIG,
): ToolExecutionContext {
return {
config,
input,
organizationId: "org-1",
connectorId: "conn-1",
};
}
const originalFetch = globalThis.fetch;
let fetchMock: ReturnType<typeof mock>;
function mockFetchSuccess(responseData: Record<string, unknown>) {
fetchMock = mock(() =>
Promise.resolve(
new Response(JSON.stringify(responseData), {
status: 200,
headers: { "Content-Type": "application/json" },
}),
),
);
globalThis.fetch = fetchMock as typeof fetch;
}
function mockFetchError(status: number, body: string) {
fetchMock = mock(() => Promise.resolve(new Response(body, { status })));
globalThis.fetch = fetchMock as typeof fetch;
}
afterAll(() => {
globalThis.fetch = originalFetch;
});
describe("{Name} handlers", () => {
describe("listSomething", () => {
test("calls GET /api/endpoint", async () => {
mockFetchSuccess({ items: [] });
const result = await listSomething(makeCtx());
expect(result.success).toBe(true);
expect(fetchMock).toHaveBeenCalledTimes(1);
const [url, opts] = fetchMock.mock.calls[0];
expect(url).toContain("/api/endpoint");
expect(opts.method).toBe("GET");
});
});
describe("error handling", () => {
test("returns error on API 404", async () => {
mockFetchError(404, '{"message":"Not found"}');
const result = await listSomething(makeCtx({ id: "bad" }));
expect(result.success).toBe(false);
expect(result.error).toContain("404");
});
test("returns error when baseUrl is missing", async () => {
const result = await listSomething(makeCtx({}, { apiKey: "key" }));
expect(result.success).toBe(false);
expect(result.error).toContain("baseUrl");
});
test("returns error on network failure", async () => {
fetchMock = mock(() => Promise.reject(new Error("Network error")));
globalThis.fetch = fetchMock as typeof fetch;
const result = await listSomething(makeCtx());
expect(result.success).toBe(false);
expect(result.error).toContain("Network error");
});
});
});make api-typecheck # must pass
make api-test-unit # must passcd modelguide-api && bun run src/features/connectors/catalog/sync.tsindex.ts) and handlers (handlers.ts) to understand current toolshandlers.ts using the existing with{Name}() wrappertools array in index.ts with full catalog metadatamake api-typecheck && make api-test-unitindex.ts and its handler in handlers.tsinputSchema if changing inputs (JSON Schema format)handlers.tsdefaultRequiresConfirmation / defaultTimeoutSeconds if behavior changedmake api-typecheck && make api-test-unitcatalog.name (e.g. "List Products"){connectorSlug}_{toolSlug} (e.g. "glowbox_store_list_products")with{Name}() HOF wrapper — never throw from handlers{ success: false, error: "message" } on failuretype, properties, requireddescription on every propertyminimum/maximum for numeric boundssetDeliveryAddress)type: "string" — plain text config (base URLs, region codes)type: "secret" — encrypted in the secrets table, resolved at runtimetype: "number" — numeric configtype: "boolean" — feature flagsdefaultRequiresConfirmation: true for side effects: orders, payments, deletions, state mutationsdefaultRequiresConfirmation: false for read-only operationsdefaultTimeoutSeconds: 30 for readsdefaultTimeoutSeconds: 60 for writes and complex operationscreate{Name}Fetcher(config){Name}ApiError with status and bodyglobalThis.fetch| Purpose | Path |
|---|---|
| Type contracts | modelguide-api/src/features/connectors/catalog/types.ts |
| Registry | modelguide-api/src/features/connectors/catalog/registry.ts |
| Sync script | modelguide-api/src/features/connectors/catalog/sync.ts |
| DB schema (CatalogTool) | modelguide-api/src/db/schema/core.ts |
| Medusa manifest | modelguide-api/src/features/connectors/catalog/medusa/index.ts |
| Medusa handlers | modelguide-api/src/features/connectors/catalog/medusa/handlers.ts |
| Medusa client | modelguide-api/src/features/connectors/catalog/medusa/client.ts |
| Medusa tests | modelguide-api/tests/unit/connectors/medusa-handlers.test.ts |
| Connector service | modelguide-api/src/features/connectors/connectors.service.ts |
| MCP handler | modelguide-api/src/features/mcp/mcp.handler.ts |
| MCP service | modelguide-api/src/features/mcp/mcp.service.ts |
© modelguide, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/mg-connector of modelguide/modelguide.
Open the folder on GitHubat commit 554caa0
Mg Connector next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Mg Connector this skillmodelguide/modelguide | 108 | — | ~4.5k | Automated safety check: Pass | MIT | |
| API Connector Builderaffaan-m/ECC | 274k | 2 repos | ~666 | Automated safety check: Pass | MIT | |
| Validate Connectorsimstudioai/sim | 30k | — | ~5.7k | Automated safety check: Pass | Apache-2.0 | |
| Add Connectorsimstudioai/sim | 30k | — | ~7.8k | Automated safety check: Pass | Apache-2.0 | |
| API Connector Builderaffaan-m/ECC | 274k | — | ~463 | Automated safety check: Pass | MIT | |
| API Connector Builderaffaan-m/ECC | 274k | — | ~328 | Automated safety check: Pass | MIT |
affaan-m/ECC
Build a new API connector or provider by matching the target repo's existing integration pattern exactly.
simstudioai/sim
Validate an existing knowledge base connector against its service's API docs
simstudioai/sim
Add or update a Sim knowledge base connector for syncing documents from an external source, including auth mode, config fields, pagination, document mapping, tags, and registry wiring.
affaan-m/ECC
ターゲット リポジトリの既存統合パターンに正確に一致する新しい API コネクターまたはプロバイダーを構築します。2 番目のアーキテクチャを発明せずに、1 つ以上の統合を追加するときに使用します。
affaan-m/ECC
通过匹配目标仓库现有的集成模式,构建一个新的API连接器或提供者。适用于在不发明第二种架构的情况下添加一个集成. An agent skill from affaan-m/ECC.
garrytan/gbrain
Connect a ChatGPT or Claude account and sync its conversation history into the brain automatically.
modelguide/modelguide
Generate YAML configuration files and run CLI commands to onboard organizations into ModelGuide.
modelguide/modelguide
Use before committing significant code changes to verify project integrity.
modelguide/modelguide
Trigger phrases - "reset local db", "recreate local postgres", "restore dump to local", "reset local database", "load backup locally"
modelguide/modelguide
Backup a PostgreSQL database from a Railway environment. An agent skill from modelguide/modelguide.
modelguide/modelguide
Restore a PostgreSQL database backup to a Railway environment.
modelguide/modelguide
Deploy all ModelGuide services (API, UI, LB) to a Railway environment.
A skill your agent uses when the user asks to add a connector, create a connector, implement a connector for a service, add a tool to a connector, update a connector tool, or asks about connector…. Mg Connector is an agent skill from modelguide/modelguide. Use when the user asks to add a connector, create a connector, implement a connector for a service, add a tool to a connector, update a connector tool, or asks about connector architecture.
Mg Connector fits situations like: the user asks to add a connector; create a connector; implement a connector for a service; add a tool to a connector.
Run `npx skills add modelguide/modelguide --skill mg-connector -a claude-code`. Or copy the skill folder (.claude/skills/mg-connector in modelguide/modelguide) into .claude/skills/mg-connector in your project. Claude Code loads it when a task matches its description.
Run `npx skills add modelguide/modelguide --skill mg-connector -a codex`. Or copy the skill folder (.claude/skills/mg-connector in modelguide/modelguide) into .agents/skills/mg-connector in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add modelguide/modelguide --skill mg-connector -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mg-connector, .gemini/skills/mg-connector, .github/skills/mg-connector and .opencode/skills/mg-connector in your project.
Going by SKILL.md and its folder, Mg Connector needs the command-line tools its instructions call (make and bun).
SKILL.md names 1 domain. In commands or code: api.test-service.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Mg Connector is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Mg Connector: API Connector Builder (affaan-m/ECC, 274k stars), Validate Connector (simstudioai/sim, 30k stars), Add Connector (simstudioai/sim, 30k stars) and API Connector Builder (affaan-m/ECC, 274k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
modelguide (a GitHub organization) maintains it in modelguide/modelguide, which has 108 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on June 20, 2026.
Source: modelguide/modelguide on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.