Token导航 LogoToken导航TokenDH.com
Huginn (Mrboen94) logo
安全风控未说明官方级别未说明来源级核验

Huginn (Mrboen94)

MCP Server

Huginn是一个基于TypeScript的工具注册与执行系统,提供工具注册、安全执行和插件管理功能,适用于开发自动化工具和模块化应用场景。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
安全执行TypeScript安全

安装说明

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

作者 / 组织

mrboen94

提供方

mrboen94

最后核验

2026/5/17 20:20

快速接入

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

详细介绍

huginn

Huginn

简洁、可组合,且足够有主见,足以惹恼某些人。

项目信息
语言TypeScript — 因为没有类型的JavaScript就是一场混乱。
运行时Bun — 更快、更轻量,而且没有 Node 的味道。
协议模型上下文协议(通过 @modelcontextprotocol/sdk)
许可证MIT —— 随便怎么做,别怪我。

Stack rationale

— click if you’re the type who reads EULAs

面包——因为启动时间不应该以咖啡休息的时间来衡量。

TypeScript —— 你未来的自己值得拥有更好的 undefined is not a function [object object]

@modelcontextprotocol/sdk ——因为重新发明协议是那些讨厌完成项目的人才会做的事。

Huginn实际的功能

维护一个工具注册表(包含名称、模式、处理程序)。

让我们像在1980年代那样,通过标准输入输出(stdio)列出并调用工具,只不过这次是用JSON。

安全执行处理程序,支持超时、中止和结构化日志记录——让您在调试时既能保持专业,又不必因问题而抓狂。

《神圣工具合约》

一切围绕着这份简单的合同展开,一旦你把它搞砸了,Huginn 就会礼貌地什么都不做,并完全忽略你。

{
  name: string,
  description: string,
  inputSchema: Record,
  handler: async (args: Record, signal: AbortSignal) => {
    content: Array,
    isError?: boolean
  }
}

可以把它看作是OpenAPI的内向表亲——简洁,却又出奇地独特。

入门指南 - 让我们先看看它是否能运行

bun install
bun install-plugins    # discover and install plugin dependencies
bun start              # starts the MCP server (stdio transport)
# dev: bun dev
# tests: bun test && bun typecheck

按压 Ctrl+C 要像文明的人类一样停止它,而不是通过关闭终端窗口。

Available scripts

# Install dependencies
bun install

# Start the MCP server
bun start

# Development with watch mode
bun dev

# Run tests
bun test
bun test:watch     # watch mode
bun coverage       # with coverage

# Type checking
bun typecheck

# Linting & formatting
bun lint
bun lint:fix
bun format
bun format:write

# Install MCP plugins
bun install-plugins

正确添加工具的方法

编辑 src/tools/registry.ts 并放入一个遵循上述契约的对象。

如果你的工具执行时间可能会超过一条推文的长度(即较长时间),请使用提供的 AbortSignal 并用……把它包起来 safeToolExecution

Example

// src/tools/registry.ts
{
  name: 'my_tool',
  description: 'Echo text back',
  inputSchema: { type: 'object', properties: { text: { type: 'string' } }, required: ['text'] },
  handler: async (args, signal) => ({
    content: [{ type: 'text', text: `You sent: ${String(args.text)}` }]
  })
}

编写一个测试(在……中) test/,因为未来的你会忘记这个工具的作用。

插件系统——为模块化思维者设计

Huginn 支持插件架构,以便将工具组织成独立的模块。

安装插件依赖项

# Interactive plugin selection (default)
bun install-plugins

# Install all plugins automatically
bun install-plugins --all

# Auto-confirm dependency installation
bun install-plugins --yes

# Combine options
bun install-plugins --all --yes

交互模式(默认):

  • 显示所有可用插件及其描述
  • 允许您选择要安装的插件
  • 输入数字(例如,“1 3”)、“全部”或“无”

命令选项:

  • --all 或者 -a安装所有插件,不进行提示
  • --yes 或者 -y自动确认 bun install 步骤

这将会:

  1. 在(指定路径/位置)发现插件文件夹 src/plugins/*/index.ts
  2. 让您选择要安装哪些插件文件夹(交互模式)
  3. 添加该文件夹中声明的缺失包 requiredPackages 致你的 package.json
  4. 可选择运行 bun install 实际安装它们
  5. 生成一个清单文件 out/plugins-manifest.json 带有文件夹名称和工具列表

创建一个插件

在(某个位置)下创建一个目录 src/plugins/your-plugin-name/ 带着一个 index.ts 文件:

// src/plugins/my-plugin/index.ts
export const myTool = {
  name: 'my_tool',
  description: 'Does something useful',
  inputSchema: {
    type: 'object',
    properties: { text: { type: 'string' } },
    required: ['text']
  },
  handler: async (args, signal) => ({
    content: [{ type: 'text', text: `Processed: ${args.text}` }]
  })
};

export const anotherTool = {
  name: 'another_tool',
  description: 'Does something else useful',
  inputSchema: { type: 'object', properties: {}, additionalProperties: false },
  handler: async (_args, _signal) => ({
    content: [{ type: 'text', text: 'All good.' }]
  })
};

// The only thing the loader cares about
export const tools = [myTool, anotherTool];

// Optional: per-plugin dependencies (installed via `bun install-plugins`)
export const requiredPackages = {
  'some-package': '^1.0.0'
};

然后跑 bun install-plugins 注册整个文件夹并安装其依赖项。

生成的工具(提升生活质量,非魔法手段)

  • create_mcp_tool创建一个带有正确标签工具名称的新插件文件夹generated_), 安全路径写入,可选依赖添加,可选安装(需您确认),以及自动刷新。
  • remove_generated_tool仅删除已生成的工具(头部+ generated_ (前缀)并刷新注册表。
  • rename_generated_tool重命名一个生成的工具(文件夹+工具名称),并进行安全检查,然后刷新。
  • edit_generated_tool更新描述、输入模式、处理程序代码以及可选的必需包;不安全代码通过一个标志控制,并附有明确警告。

规则很简单:你提供逻辑,Huginn提供界限。保持在界限之内 src/plugins/,出口 tools = [...],剩下的我们来做。

包含的插件

代码截图

从代码字符串中渲染一个带有语法高亮、行号和可选行高亮的样式化PNG图像。

参数:

  • 代码(字符串,必填)
  • 语言(字符串,默认值:"plaintext")
  • 透明(布尔值,默认:false)
  • 高亮显示(字符串,行范围如“3,5-7,10”)
  • 比例(数字,默认值:2)
  • 标题覆盖(字符串)

注释:

  • 固定行高(18像素)并保留缩进;空行保持行高。
  • Highlight 使用嵌入的左侧栏(无布局偏移)并避免了首个字符的重叠。
  • 支持非常长的行;视口会自动扩展以捕捉完整宽度。
  • 透明模式:圆角设计,标题更小,边距+阴影以实现区分。
  • 当Iosevka字体可用时,将嵌入使用;否则回退到系统默认的等宽字体。

可视化差异图像

从统一差异文件生成HTML或PNG。

参数:

  • diff(字符串,必填)
  • 格式 ("html" | "image",默认值: "html")
  • 输出类型("并排" | "逐行",默认:并排)

内置管理工具

刷新插件

无需重启服务器即可重新加载插件。

模式:

  • 插件(字符串,可选):工具名称或仅刷新该插件的插件目录。

示例:

{ "name": "refresh_plugins", "arguments": {} }
{ "name": "refresh_plugins", "arguments": { "plugin": "code_screenshot" } }

日志记录与配置 - 为极度谨慎者设计

日志: logs/mcp-tools.log(JSON-lines)。用以下内容覆盖 MCP_TOOL_LOG_FILE

超时: MCP_TOOL_TIMEOUT_MS (毫秒)。 — 是的,你可以把它设置为无限大,但别这么做。

路线图——亦称“进步的幻觉”

Planned items

最小化示例MCP客户端(标准输入输出),展示ListTools + CallTool工作流。

更多示例工具,以及为实际运行这些工具的人员提供的端到端测试。

许可证

麻省理工——去创造些有用的东西吧。或者,去创造出些深陷诅咒的东西也行。 Huginn不会评判,但他确实知晓一切。

目录标签

目录标签

安全执行TypeScript安全工具注册本地部署插件管理开发自动化模块化应用

接入字段

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

未说明

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

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

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

0

权限和风险

未说明none部署方式未说明

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

安装前确认

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

仍需确认:installCommand

来源信息

继续浏览同类 MCP