Token导航 LogoToken导航TokenDH.com
Open Functions logo
AI代理未说明官方级别未说明来源级核验

Open Functions

MCP Server

openFunctions是一个MIT许可的TypeScript框架,用于构建AI可调用工具,并通过MCP、聊天适配器、工作流和代理进行暴露。

工具数

0

提示词数

0

GitHub Stars

3

资源数

0
TypeScriptClaudeAI代理Claude DesktopClaudeCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Tom-R-Main

提供方

Tom-R-Main

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

Build AI tools first. Compose agents when you need them.

Quick Start · Mental Model · Choose a Primitive · Capability Ladder · Providers · Examples · Docs

العربية · বাংলা · Deutsch · Español · Français · हिन्दी · Indonesia · 日本語 · 한국어 · Nederlands · ਪੰਜਾਬੀ · Polski · Português · Русский · Svenska · తెలుగు · ไทย · Türkçe · Українська · 粵語 · 简体中文 · 繁體中文

______________________________________________________________________

openFunctions是一个MIT许可的TypeScript框架,用于构建AI可调用工具并通过以下方式公开它们 主控程序聊天适配器、工作流和代理。它的核心运行时很简单:

ToolDefinition -> ToolRegistry -> AIAdapter

其他一切都在这之上:

  • workflows 是围绕工具的确定性编排
  • agents 是经过筛选的注册表上的LLM循环
  • structured output 是一种合成工具模式
  • memoryrag 是可以封装回工具中的有状态系统

如果您了解工具运行时,框架的其余部分将保持清晰。

defineTool() -> registry.register() -> adapter/server executes tool
                                    -> workflows compose tools
                                    -> agents use filtered tools
                                    -> memory/rag expose more tools

快速开始

git clone https://github.com/Tom-R-Main/openFunctions.git
cd openFunctions
bash setup.sh
cp .env.example .env
npm run test-tools

首先要构建的是工具,而不是代理。

心理模型

工具是您的业务逻辑加上AI可以读取的模式:

import { defineTool, ok } from "../framework/index.js";

export const rollDice = defineTool({
  name: "roll_dice",
  description: "Roll a dice with the given number of sides",
  inputSchema: {
    type: "object",
    properties: {
      sides: { type: "number", description: "Number of sides (default 6)" },
    },
  },
  handler: async ({ sides }) => {
    const rolled = Math.floor(Math.random() * ((sides as number) || 6)) + 1;
    return ok({ rolled });
  },
});

一个定义可以是:

  • 直接执行 registry.execute()
  • 通过MCP暴露于Claude/Desktop
  • 在交互式聊天循环中使用
  • 组成工作流
  • 过滤到特定于代理的注册表中

阅读更多: 建筑

选择正确的图元

使用这个当你想要的时候它到底是什么
defineTool()面向人工智能的可调用业务逻辑核心原语
createChatAgent()一个可组合、可嵌入的AI代理工具+内存+上下文+适配器在一个配置中
pipe()确定性编排代码驱动工具/LLM管道
defineAgent()自适应多步工具使用在过滤注册表上的LLM循环
createConversationMemory() / createFactMemory()线程/事实状态持久性和内存工具
createRAG()语义文档检索pgvector+嵌入+工具
connectProvider()外部系统上下文来自ExecuFunction、Obsidian等的结构化工具。
createStore() / createPgStore()持久性存储层,而非检索层

经验法则:

  • 从工具开始。
  • 使用 createChatAgent() 当你想要一个具有内存和上下文的完整代理时。
  • 当你知道顺序时,使用工作流。
  • 使用 defineAgent() 当你需要团队中的专业特工时。
  • 为您控制的状态添加内存。
  • 添加RAG用于按含义检索文档。
  • 当您需要外部系统(任务、日历、CRM)时,添加上下文提供程序。

能力阶梯

1.构建一个工具

npm run create-tool expense_tracker

编辑 src/my-tools/expense_tracker.ts,然后运行:

npm run test-tools
npm test

2.通过MCP或聊天公开

npm start
npm run chat -- gemini

同一注册机构为两者提供权力。

3.用工作流编写

工作流是默认的“高级”原语,因为控制流保持显式:

import { pipe, toolStep, llmStep } from "./framework/index.js";

const research = pipe(toolStep(registry, "define_word"))
  .then(async (result) => result.data?.meanings?.[0] ?? "")
  .then(llmStep(adapter, registry, "Explain this simply: {{input}}"));

await research.run({ word: "ephemeral" });

4.构建聊天代理

createChatAgent() 将工具、内存、上下文提供程序和AI适配器组合到一个可嵌入的代理中:

import { createChatAgent } from "./framework/index.js";

const agent = await createChatAgent({
  provider: "gemini",
  preset: "study-buddy",
  memory: true,                    // conversation + fact memory (on by default)
  providers: ["execufunction"],    // connect external context
});

// Use it four ways:
await agent.interactive();                          // CLI
const result = await agent.chat("Create a task");   // programmatic
for await (const chunk of agent.chat("hello", { stream: true })) { ... }  // streaming
await agent.serve({ port: 3000 });                  // HTTP server

相同的配置适用于代码、CLI标志或YAML文件。默认情况下,内存是打开的——代理会跨会话进行记忆。

5.添加代理的自适应行为

defineAgent() 适用于团队和工作流程中的专业代理——过滤注册表和推理循环:

import { defineAgent } from "./framework/index.js";

const researcher = defineAgent({
  name: "researcher",
  role: "Research Analyst",
  goal: "Find accurate information using available tools",
  toolTags: ["search"],
});

当多个专业代理需要协作时,使用团队。

6.仅在需要时添加状态

坚持不懈:

const tasks = createStore("tasks");
const tasksPg = await createPgStore("tasks");

内存:

const conversations = createConversationMemory();
const facts = createFactMemory();
registry.registerAll(createMemoryTools(conversations, facts));

抹布:

const rag = await createRAG({ embeddingProvider: "gemini" });
registry.registerAll(rag.createTools());

RAG文件: docs/RAG.md

7.连接外部环境

上下文提供者将外部系统(任务管理器、日历、CRM、知识库)作为工具引入代理运行时:

import { connectProvider, contextPrompt } from "./framework/index.js";
import { createExecuFunctionProvider } from "./providers/execufunction/index.js";

// Connect — registers 17 tools tagged "context" + "context:execufunction"
const exf = await connectProvider(
  createExecuFunctionProvider({ token: process.env.EXF_PAT }),
  registry,
);

// Inject active tasks + upcoming events into agent system prompts
const context = await contextPrompt([exf]);

ContextProvider 接口是可插拔的——实现 metadata, connect(),以及 createTools() 将任何后端引入框架。请参阅 建筑 对于完整的界面。

提供者状态功能
执行功能内置任务、项目、日历、知识、人员、组织、代码库
黑曜石模板(计划)知识
概念模板(计划)知识、任务、项目

命令

npm run test-tools          # Interactive CLI — test tools locally
npm run dev                 # Dev mode — auto-restarts on save
npm test                    # Run tool-defined automated tests
npm run chat                # Chat with AI using your tools
npm run chat -- gemini      # Force a specific provider
npm run chat -- --no-memory # Chat without persistent memory
npm run create-tool   # Scaffold a new tool
npm run docs                # Generate tool reference docs
npm run inspect             # MCP Inspector web UI
npm start                   # Start MCP server for Claude Desktop / Cursor

提供商

在中设置一个API密钥 .env 聊天循环将自动检测提供者。

提供程序默认模型API
双子座gemini-3-flash-preview函数调用
OpenAIgpt-5.5响应API
人类学claude-sonnet-4-6消息+工具_使用
xAIgrok-4.20-0309-reasoning响应API
OpenRoutergoogle/gemini-3-flash-previewOpenAI兼容

示例:

npm run chat
npm run chat -- gemini
npm run chat -- openai gpt-5.5
npm run chat -- gemini --prompt study-buddy

测试

使用工具定义进行实时测试:

defineTool({
  name: "create_task",
  // ...
  tests: [
    { name: "creates a task", input: { title: "Read ch5", subject: "Bio" }, expect: { success: true } },
    { name: "fails without subject", input: { title: "Read ch5" }, expect: { success: false } },
  ],
});

注册表在处理程序运行之前验证参数,因此模式错误被清晰地显示出来,以便人类和LLM进行恢复。

示例

工具模式
研究跟踪器create_task, list_tasks, complete_taskCRUD+存储
书签管理器save_link, search_links, tag_link数组+搜索
食谱管理员save_recipe, search_recipes, get_random嵌套数据+随机
费用拆分器add_expense, split_bill, get_balances数学+计算
锻炼记录仪log_workout, get_stats, suggest_workout日期过滤+统计
词典define_word, find_synonyms外部API(无密钥)
测验生成器create_quiz, answer_question, get_score有状态的游戏
AI工具summarize_text, generate_flashcards工具调用LLM
公用事业calculate, convert_units, format_date无国籍助手

文档

  • 建筑:运行时模型、筛选注册表、合成工具和执行路径
  • 检索增强生成:语义组块、Gemini/OpenAI嵌入、pgvector模式、HNSW搜索和工具集成

集成

Siftable上下文提供程序

src/providers/execufunction/ 暴露 可筛分 (前身为ExecuFunction)作为openFunctions ContextProvider. 提供者包装已发布的 @siftable/mcp-server SDK;今天公开了10个域中的31个工具(任务、日历、应用程序等), 知识、项目、人员、组织、代码库、工作项、保管库, 数据集、代码存储器)。可以访问完整的SDK表面(~111个方法) 通过 client.raw() 适用于任何尚未包装的工具。

import { connectProvider, registry } from "openfunction/framework";
import { createSiftableProvider } from "openfunction/providers/execufunction";

const sift = await connectProvider(createSiftableProvider(), registry);

身份验证解析:显式 { token } 论点→ SIFT_PAT env → EXF_PAT env(遗留回退)。相同的回退链 SIFT_API_URLSIFT_WORKSPACE_ID.

tsx scripts/test-siftable-live.ts (与 SIFT_PAT 设置)到 根据您的帐户验证提供商是否实际往返。

张开爪桥

src/framework/openclaw.ts 出口 toOpenclawTools(registry),其中 转换openFunctions ToolRegistry 变成了openclaw的形状 api.registerTool() 期待。运行时不依赖于 @openclaw/plugin-sdk --桥在局部定义了兼容的形状, 因此,该框架保持独立。

有两个参考插件 plugins/:

  • openclaw-execufunction/ --可筛分开爪。现代化到

包裹 @siftable/mcp-server 直接;解决 SIFT_PAT 首先,然后 遗产 EXF_PAT插件id为 execufunction 背部与 现有的openclaw配置。

  • openclaw-openfunctions/ --显示以下内容的参考插件

toOpenclawTools 这座桥上有一个手工制作的小登记处。标记 private:true;使用对托管框架的相对导入 (在发布之前,请阅读其README以了解需要更改的内容)。

在openclaw中安装Siftable插件:

openclaw plugins install @openfunctions/openclaw-execufunction

SIFT_PAT (或遗产 EXF_PAT)在环境中或通过openclaw 插件设置。

项目结构

openFunctions/
├── src/
│   ├── framework/              # Core runtime + composition layers
│   │   ├── chat-agent.ts       # createChatAgent() — composable chat agent factory
│   │   ├── chat-agent-types.ts # ChatAgent, ChatAgentConfig, ChatResult types
│   │   ├── chat-agent-resolve.ts # Config resolution, provider auto-detection
│   │   ├── chat-agent-http.ts  # HTTP server for agent.serve()
│   │   ├── context.ts          # Context provider interface
│   │   └── ...                 # tool, registry, agents, memory, rag, workflows
│   ├── providers/
│   │   └── execufunction/      # Siftable context provider (wraps @siftable/mcp-server)
│   ├── examples/               # Reference tool patterns
│   ├── my-tools/               # Your tools
│   └── index.ts                # MCP entrypoint
├── plugins/
│   ├── openclaw-execufunction/ # Siftable plugin for openclaw (publishable)
│   └── openclaw-openfunctions/ # Reference: toOpenclawTools bridge demo (private)
├── docs/                       # Architecture docs
├── scripts/                    # chat, create-tool, docs
├── test-client/                # CLI tester + test runner
├── system-prompts/             # Prompt presets
└── package.json

许可证

麻省理工学院——见 许可证

目录标签

目录标签

TypeScriptClaudeAI代理AI工具构建本地部署TypeScript框架工作流编排代理系统语义检索

支持客户端

Claude DesktopClaudeCursor

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

token

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明token部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP