developing-genkit-tooling

作者: firebase

撰寫 Genkit 工具的最佳實踐,包括 CLI 指令與 MCP 伺服器工具。涵蓋命名慣例、架構模式與一致性…

npx skills add https://github.com/firebase/genkit --skill developing-genkit-tooling

Developing Genkit Tooling

Naming Conventions

Consistency in naming helps users and agents navigate the tooling.

CLI Commands

Use kebab-case with colon separators for subcommands.

  • Format: noun:verb or category:action
  • Examples: flow:run, eval:run, init
  • Arguments: Use camelCase in code (flowName) but standard format in help text (<flowName>).

MCP Tools

Use snake_case for tool names to align with MCP standards.

  • Format: verb_noun
  • Examples: list_flows, run_flow, list_genkit_docs, read_genkit_docs

CLI Command Architecture

Commands are implemented in cli/src/commands/ using commander.

Runtime Interaction

Most commands require interacting with the user's project runtime. Use the runWithManager utility to handle the lifecycle of the runtime process.

import { runWithManager } from '../utils/manager-utils';

// ... command definition ...
.action(async (arg, options) => {
  await runWithManager(await findProjectRoot(), async (manager) => {
    // Interact with manager here
    const result = await manager.runAction({ key: arg });
  });
});

Output Formatting

  • Logging: Use logger from @genkit-ai/tools-common/utils.
  • Machine Readable: Provide options for JSON output or file writing when the command produces data.
  • Streaming: If the operation supports streaming (like flow:run), provide a --stream flag and pipe output to stdout.

MCP Tool Architecture

MCP tools in cli/src/mcp/ follow two distinct patterns: Static and Runtime.

Static Tools (e.g., Docs)

These tools do not require a running Genkit project context.

  • Registration: defineDocsTool(server: McpServer)
  • Dependencies: Only the server instance.
  • Use Case: Documentation, usage guides, global configuration.

Runtime Tools (e.g., Flows, Runtime Control)

These tools interact with a specific Genkit project's runtime.

  • Registration: defineRuntimeTools(server: McpServer, options: McpToolOptions)
  • Dependencies: Requires options containing manager (process manager) and projectRoot.
  • Schema: MUST use getCommonSchema(options.explicitProjectRoot, ...) to ensure the tool can accept a projectRoot argument when required (e.g., in multi-project environments).
// Runtime tool definition pattern
server.registerTool(
  'my_runtime_tool',
  {
    inputSchema: getCommonSchema(options.explicitProjectRoot, {
      myArg: z.string(),
    }),
  },
  async (opts) => {
    // Resolve project root before action
    const rootOrError = resolveProjectRoot(
      options.explicitProjectRoot,
      opts,
      options.projectRoot
    );
    if (typeof rootOrError !== 'string') return rootOrError;

    // access manager via options.manager
  }
);

Error Handling

MCP tools should generally catch errors and return them as content blocks with isError: true rather than throwing exceptions, which ensures the client receives a structured error response.

try {
  // operation
} catch (err) {
  const message = err instanceof Error ? err.message : String(err);
  return {
    isError: true,
    content: [{ type: 'text', text: `Error: ${message}` }],
  };
}

來自 firebase 的更多技能

firebase-remote-config-basics
firebase
Firebase Remote Config 的全面指南,涵蓋範本管理與 SDK 使用。當使用者需要協助設定 Remote Config、管理功能開關或動態更新應用程式行為時,請使用此技能。
officialdevelopmentapi
developing-genkit-dart
firebase
統一AI SDK for Dart,支援程式碼生成、結構化輸出、工具、流程與代理。提供核心API用於生成、工具定義、流程編排、嵌入與串流,並具備單一介面。包含8個以上外掛程式,支援LLM提供者(Google Gemini、Anthropic Claude、OpenAI GPT)、Firebase AI、模型上下文協定、Chrome瀏覽器整合,以及透過Shelf進行HTTP伺服器託管。內建CLI與本地開發UI,用於流程執行、追蹤、模型實驗等。
official
developing-genkit-go
firebase
使用 Genkit 在 Go 中開發 AI 驅動的應用程式。當使用者要求使用 Genkit 在 Go 中建置 AI 功能、代理程式、流程或工具時使用,或在處理…
official
developing-genkit-js
firebase
使用 Genkit 流程、工具及多模型支援,建構 AI 驅動的 Node.js/TypeScript 應用程式。Genkit 與供應商無關;透過外掛支援 Google AI、OpenAI、Anthropic、Ollama 及其他 LLM 供應商。使用 Zod 定義型別安全的結構化流程,執行生成請求,並在 TypeScript 中組合多步驟 AI 工作流程。需要 Genkit CLI v1.29.0 以上版本;近期重大 API 變更,請務必查閱 genkit 文件:read 與 common-errors.md 以取得當前模式,而非依賴先前知識...
official
developing-genkit-python
firebase
使用 Python 中的 Genkit 開發 AI 驅動的應用程式。當使用者詢問關於 Genkit、AI 代理、流程或 Python 中的工具,或遇到 Genkit…
official
firebase-ai-logic
firebase
客戶端Gemini整合,適用於網頁應用程式,支援多模態推論、串流及裝置端混合執行。支援純文字與多模態輸入(圖片、音訊、影片、PDF);超過20 MB的檔案會透過Cloud Storage路由。包含自動記錄歷史的聊天會話、即時顯示的串流回應,以及強制結構化JSON輸出。透過Chrome中的Gemini Nano提供裝置端混合推論,並自動備援至雲端執行。正式環境需啟用App Check...
official
firebase-ai-logic-basics
firebase
用於將 Firebase AI Logic(Gemini API)整合至網頁應用程式的官方技能,涵蓋設定、多模態推論、結構化輸出及安全性。
official
firebase-app-hosting-basics
firebase
使用 Firebase App Hosting 搭配 Next.js、Angular 及其他支援的框架,部署與管理全端網頁應用程式。需使用 Blaze 計費方案的 Firebase 專案;支援伺服器端渲染(SSR)與增量靜態再生(ISR)工作流程。可透過 firebase.json 設定檔進行部署,並選擇性使用 apphosting.yaml 設定後端,或啟用 GitHub 整合的自動化「git push 部署」。包含透過 CLI 指令管理機密資訊,以安全存取敏感金鑰...
official