mcpField
A
Algorithm Finder

Algorithm Finder

远程服务
pipeworx.io开发工具06 天前更新

关于 Algorithm Finder

Algorithm Finder 是供开发者为计算问题选择算法的 MCP 服务。它结合带引用的教科书事实、基于约束的比较、实现参考和近期研究论文;请求处理过程中不运行模型。

主要功能

  1. 01根据问题描述查找算法
  2. 02依据约束比较候选方案
  3. 03展示带引用的复杂度界
  4. 04获取方法参考及实现
  5. 05呈现近期研究论文

适用场景

  1. 01根据图约束选择最短路径算法
  2. 02比较排班问题的优化建模方式
  3. 03了解某种搜索技术的近期研究

MCP 相关

提供算法查找、比较和查询工具,以及实现参考。可通过 Pipeworx 网关访问,也可作为本地 stdio MCP 服务运行。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://gateway.pipeworx.io/algorithm-finder/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

45
参数类型必填说明
qstring否question 的别名。
askstring否question 的别名。
textstring否question 的别名。
inputstring否question 的别名。
packsarray否可选。将路由限制为这些包的 slug(例如 ["sec-form-d","sec-13f"]),路由器随后只会从这些包中的工具进行选择。省略则使用默认的完整目录路由。Slug 可从 list_packs / search_packs / https://pipeworx.io/directory 获取;未列出或未知的 slug 会被忽略,并在 _meta.pack_scope.ignored 中列出。如果没有任何 slug 能匹配问题,则会在整个目录中路由,并设置 _meta.pack_scope.full_catalog:true(绝不会返回空答案)。
querystring否question 的别名。
promptstring否question 的别名。
messagestring否question 的别名。
questionstring是用自然语言表达的问题或请求。支持 query、q、prompt、text、input、ask、message 作为别名。

详细介绍

algorithm-finder

描述一个计算问题,获取适用的算法、适用原因、页面中引用的复杂度界限,以及获取实现的途径。

它是 Pipeworx 的一部分——一个将 AI Agent 连接到 1872+ 个实时数据源的 MCP 网关。这是独立的非官方集成,与上游提供方无关联、未获其认可,也并非由其发布。

由 Mojibake 提供,Pipeworx 的创作者。

问它「全源最短路径」,它不会猜测。它会查找教科书中的答案(Floyd-Warshall、Johnson's,以及决定二者如何选择的前提条件,并引用 CLRS 的确切页面),检查过去五年 arXiv 和 Hugging Face Papers 上是否有更新的内容,并告诉你它目前还不知道什么。请求处理流程中不会运行任何模型。每条事实要么有引用,要么来自实时来源,绝不靠猜测。

它实际返回的三项结果

这些是针对实时工具包的真实调用结果,为控制篇幅做了删减。以下内容均非虚构。

1.「什么算法可以解决全源最短路径问题?」
algorithm_find({ problem: "all-pairs shortest paths", want: "both" })

它正确地根据真正决定二者如何选择的约束,将两种方法区分开来:

{
  "name": "Floyd-Warshall algorithm",
  "preconditions": ["Negative edge weights are allowed, but there must be no negative-weight cycle."],
  "guarantee": "exact",
  "bounds": [
    { "quantity": "time", "bound": "Theta(V^3)", "kind": "worst_case",
      "cite": "CLRS4 ch. 23.2 p. pdf:851" }
  ],
  "when_to_use": "All-pairs shortest paths on dense graphs, or whenever its simple triple-loop implementation (no priority queue needed) is worth the cubic cost.",
  "when_not": "On sparse graphs, Johnson's algorithm has a better asymptotic bound.",
  "alternatives": ["Johnson's algorithm", "Dijkstra's algorithm", "Bellman-Ford algorithm"]
},
{
  "name": "Johnson's algorithm",
  "preconditions": ["No negative-weight cycle (checked by the initial Bellman-Ford run)."],
  "guarantee": "exact",
  "bounds": [
    { "quantity": "time", "bound": "O(V^2 lg V + VE)", "kind": "worst_case",
      "cite": "CLRS4 ch. 23.3 p. pdf:857" }
  ],
  "when_to_use": "All-pairs shortest paths on sparse graphs with some negative edge weights -- asymptotically faster there than Floyd-Warshall's Theta(V^3)."
}

它还会在你询问之前,指出可能改变答案的未决问题:

"open_questions": [
  "Can any edge weight be negative? (Dijkstra requires non-negative weights; Bellman-Ford does not.)",
  "One source, or every pair of vertices?",
  "Are capacities integral? Is there a cost per unit of flow to minimise as well?"
]

……此外还有五篇近期论文,均标注了日期,涵盖「新颖」方向,其中包括 Warm-Starting All-Pairs Shortest Paths with Predictions(arXiv,2026)和 Fast 2-Approximate All-Pairs Shortest Paths(arXiv,2023)。

2.「近似最近邻搜索有哪些新进展?」
algorithm_find({ problem: "approximate nearest neighbor search", want: "novel" })

这是纯研究方向,不涉及教科书条目。它不只是列出论文,还会将论文中出现的方法名称聚类,让反复出现的名称直接成为答案,而不只是一个你得自己留意的标题:

"novel_methods": [
  {
    "name": "HNSW",
    "mentions": 8,
    "first_seen": 2022,
    "last_seen": 2026,
    "example_paper": {
      "title": "From HNSW to Information-Theoretic Binarization: Rethinking the Architecture of Scalable Vector Search",
      "date": "2025-12-16T23:24:37.000Z",
      "url": "https://huggingface.co/papers/2601.11557"
    }
  },
  { "name": "NSG", "mentions": 6, "first_seen": 2017, "last_seen": 2025 },
  { "name": "SPANN", "mentions": 2, "first_seen": 2021, "last_seen": 2025 }
]

HNSW 会根据研究内容自行浮现,并提供数量和日期范围,证明它是一个真实信号,而非单篇论文的看法。

3.「为公平排班制定模型时,该用 CP-SAT、MIP,还是流模型?」
algorithm_compare({
  problem: "assign people to shifts with availability and skills, minimum staffing per shift, and distribute undesirable shifts fairly",
  names: ["constraint-programming", "mixed-integer-programming", "min-cost-flow"],
  constraints: { objective: "fairness", exact: true }
})

你提出的每项约束都会针对每种方法给出判断;你没有提出的每项限制也会作为假设返回,而不会被默默视为满足:

{
  "verdict": "conditional",
  "winner": "Constraint programming (CP-SAT)",
  "summary": "Constraint programming (CP-SAT), IF continuous_variables is false.",
  "candidates": [
    { "name": "Constraint programming (CP-SAT)",
      "constraints": { "objective": { "status": "satisfied", "given": "fairness" },
                       "exact":     { "status": "satisfied", "given": true } },
      "assumes": [{ "constraint": "continuous_variables", "requires": [false],
        "why": "CP-SAT requires every decision variable to be declared as an integer; it has no native continuous-variable type the way an LP/MIP solver does." }] },
    { "name": "Mixed-integer programming",
      "constraints": { "objective": { "status": "unknown", "given": "fairness" } },
      "assumes": [{ "constraint": "linear", "requires": [true] }] },
    { "name": "Minimum-cost flow (successive shortest paths)",
      "constraints": { "objective": { "status": "unknown", "given": "fairness" } },
      "assumes": [{ "constraint": "integer_capacities", "requires": [true] }],
      "bounds": [{ "bound": "O(F*m*n)", "kind": "worst_case",
                   "cite": "Minimum-cost flow, Complexity <https://cp-algorithms.com/graph/min_cost_flow.html>" }] }
  ],
  "open_questions": [
    "How should fairness be measured: equal counts of undesirable assignments, minimise the worst-off person, or minimise variance? Each is a different objective.",
    "Do you need a provably optimal schedule, or is a good feasible one enough? (CP-SAT/MIP can prove optimality; heuristics only find feasible answers.)",
    "Are any rules hard (must hold) versus soft (preferences with a penalty)?"
  ]
}

它不会声称流模型无法处理公平性,而是会坦言自己不知道,并询问能够得出结论的问题。如果某个键没有对应的规则(例如 gpu_available),系统会按名称拒绝,并列出它能够识别的键,绝不会悄悄将其标记为已满足。

安装

托管版(无需设置)
{
  "mcpServers": {
    "algorithm-finder": {
      "url": "https://gateway.pipeworx.io/algorithm-finder/mcp"
    }
  }
}

此端点还提供共享的 Pipeworx 元工具(ask_pipeworx、discover_tools 等),因此你可以用普通英语提问,而不必直接调用工具:

ask_pipeworx({ question: "what algorithm solves the assignment problem?" })
本地版(无需账户,也不依赖我们的网络)
{
  "mcpServers": {
    "algorithm-finder": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-algorithm-finder"]
    }
  }
}

发布后即可使用。来源相同,四种工具相同,无需经网关往返,也不包含任何共享元工具。

为何值得信任

  • 每条事实都由我们用自己的话表述,并注明出处页面。 精选的方法表(data/methods.json)说明每种方法解决的问题、前提条件、复杂度界限(最坏情况、期望或摊还——绝不会合并成一个数字)、适用与不适用场景,并注明事实所依据的书籍和章节:CLRS 第 4 版、Erciyes 的 Guide to Graph Algorithms、Christian & Griffiths 的 Algorithms to Live By、Bhargava 的 Grokking Algorithms。我们不会提供这些书中的任何句子、图表或代码,只提供从中确立并重新表述的事实。
  • 没有引用的复杂度界限不会被接受,也不会发布。 用于构建此表的烘焙脚本会拒绝任何没有附上页面引用的非定性复杂度界限。若无法指出某个界限的出处页面,该界限就会被标记为 qualitative,绝不会伪装成数字。
  • 实现都标明了其真实定位。 每个代码示例都带有 grade: "educational"——它是 Rosetta Code 的参考解法,不是经过生产环境测试的软件包。目前还没有 application 级别;任何实现都未针对固定版本的依赖项进行测试。
  • 许可证随数据一同提供,而不只写在此 README 中。 NIST 的 Dictionary of Algorithms and Data Structures 是美国政府作品,属于公有领域(17 U.S.C. § 105)。Rosetta Code 和 cp-algorithms 采用 CC BY-SA 4.0 许可证——这些来源的每条响应都内嵌署名说明和相同方式共享义务,让你在使用数据时就能看到条款,而不是埋在许可证文件里。

贡献

有两种参与方式:添加方法,或添加测试用例。方法应添加到 data/methods.json,并且你添加的每个复杂度界限都需要可靠引用(书籍、章节和页码,或论文、官方库文档);若条目声明了复杂度却没有引用依据,构建过程就会拒绝该条目。测试用例应添加到 data/harness.json:包含一个问题,可选地包含候选项和约束,以及应得出的答案。当前未通过的用例最有价值,因为接下来要修复的正是这些问题。无论哪种方式,都请注明来源。没有来源,就不合并。

参考

工具

  • algorithm_find(problem, want?, since_year?, limit?) — 用文字描述问题, 获取匹配的教科书方法(每种方法解决什么问题、前置条件、复杂度界限及其类型——最坏情况/期望/摊销、何时使用和何时不使用、替代方案、引用来源)、答案会决定该选哪种方法的待解问题、Skiena 算法库中的问题页面,以及来自 Hugging Face Papers 和 arXiv 的近期论文。want 可设为 common、 novel 或 both(默认值)。可选的 constraints(键与 algorithm_compare 相同)会将违反任一约束的教科书方法结果移至末尾,并为每项方法添加逐项约束的 fit。
  • algorithm_compare(names? | problem?, constraints) — 说明你的实例的事实({"negative_weights": true, "query": "single_source"}、 {"stable": true}、{"exact": false, "dimensions": "high"}),每个候选方法都会根据整理后的表格,针对每项约束标记为 满足/违反/未知。返回一个 verdict——recommended、conditional(最佳候选方法有表格未说明的约束,并会列出这些约束的名称)、 none_compatible 或 no_constraints——以及胜出方法、每个候选方法的复杂度界限和不适用建议,还有 decisive_questions:你未说明、但会排除某些候选方法的约束。若某种方法有你未说明的限制(DAG 最短路径要求 acyclic: true),该限制会列在 assumes 下,并使 verdict 变为 conditional;假设条件较少的方法排名更高,因此特殊情况方法绝不会凭借你未提供的事实胜出。键和值由 data/constraints.json 固定;未知的键或值会返回在 constraints_rejected 中,不会被静默忽略。
  • algorithm_lookup(name) — 全面介绍一种指定方法:整理后的事实、NIST DADS 词典条目(定义、别名、关联关系、复杂度说明、实现链接)、cp-algorithms 文章、相关问题页面,以及 Rosetta Code 提供该方法实现的语言。短名称和别名也适用 (Dijkstra、KMP、union-find)。
  • algorithm_implementations(name, language?) — Rosetta Code 提供该方法实现的语言;指定 language 时,还会返回该语言的实现源码(CC BY-SA 4.0,标记为 educational),以及 DADS 条目、cp-algorithms 文章和算法库实现链接中的参考链接。

每个响应都包含 data_as_of(索引中 DADS 条目的最新修改日期)、主要来源的 license 信息块,以及每个条目对应的来源 URL。未找到结果时,返回 found: false,并附带 reason(no_match、 language_not_present)和说明尝试内容的 hint;传输或解析失败时会抛出错误,而不会返回空列表。

身份验证

无需密钥。

数据来源
  • https://xlinux.nist.gov/dads/ — NIST《算法与数据结构词典》(Paul E. Black 编)。约 1,120 个词条。美国政府作品,不受版权保护(17 U.S.C. § 105)。全部词条集都在生成的索引中(src/af-index-data.ts,由 scripts/bake-algorithm-finder-index.mjs 重新构建)。
  • data/methods.json — 为此数据包编写的精选表格:针对每种方法,说明它解决的问题、前提条件、界限(含类型和条件)、适用与不适用场景、替代方案、日常用语对问题的表述、引用来源、tier(core / common / specialized)、family_rank(在其约束条件成立时,该方法在所属系列中的优先级)以及 constraints(该方法接受的各个词汇键值及其原因)。相关事实依据 Cormen、Leiserson、Rivest 和 Stein 的《算法导论》第 4 版(CLRS4);Erciyes 的《图算法指南》第 2 版(Erciyes2026);Bhargava 的《算法图解》(Grokking2024);Christian 和 Griffiths 的《生活中的算法》(ATLB);对于书中未涉及的方法(HNSW、MinHash、Bloom filter、一致性哈希、A*、CP-SAT 等),则依据原始论文和官方库文档,每条引用均附有所读内容的 URL。所有内容均以我们自己的措辞表述,不提供任何书籍或论文的原文。若非定性界限缺少页码引用,构建脚本会拒绝处理。
  • https://www.algorist.com/ — Steven Skiena 的 Stony Brook 算法资料库。索引中仅包含 75 个问题的名称、类别和 URL;每次调用时都会获取问题页面上的输入/问题描述和实现链接,并注明出处。
  • https://cp-algorithms.com/ — 其自身搜索索引中的标题、位置和标签;每次调用时都会获取文章开头的段落。采用 CC BY-SA 4.0 许可,并在响应中注明出处。
  • https://rosettacode.org/w/api.php — MediaWiki API。使用 list=search 查找任务页面;各语言的解决方案是二级标题分区(action=parse&prop=sections),其中一个分区的 wikitext 会给出 <syntaxhighlight lang="…"> 内的代码。采用 CC BY-SA 4.0 许可,并注明出处。注意:对任务名称使用 list=categorymembers 会返回空列表——解决方案是任务页面的分区,而不是分类成员。
  • https://huggingface.co/api/papers/search — Hugging Face Papers,是 Papers with Code 的后继服务(其 API 现在会重定向到此处)。会读取摘要,从中提取方法名称。
  • https://export.arxiv.org/api/query — arXiv Atom API,限定为 cs.DS / cs.CC / cs.DM / cs.LG / cs.IR / cs.NE / cs.DB,并按相关性排序。两个研究来源均直接调用,因此此数据包不依赖其他数据包。
  • data/constraints.json — 约束词汇表。data/harness.json — algorithm_compare 的验收用例,由 src/compare.test.ts 运行;该文件还会篡改表格中的一项事实,并要求测试框架失败。
已知的词汇缺口

撰写者报告了约束词汇表目前无法表达的事实,因此相关方法会针对这些事实返回 unknown:图的连通性(Hierholzer)、是否已知簇的数量(DBSCAN 与 k-means)、故障模型(Raft/Paxos 的崩溃故障与拜占庭故障)、区间聚合类型(Fenwick 树、线段树与稀疏表)、坐标还是仅有距离(kd-tree 与 vp-tree)、物品是否可分(分数背包与 0-1 背包)、矩阵是否适定(LU、最小二乘法)、先验分布系列(贝叶斯预测规则)、折扣率(Gittins 指数)、玩家数量(博弈论)。请在 data/constraints.json 中添加键、补充注释,并添加一个测试框架用例。

值得了解的注意事项
  • DADS 会在 terms.html 中为每个别名列出一个术语(约 1,120 个条目对应 1,309 个名称);别名来自该索引,而不只是来自“Also known as”。
  • DADS 的复杂度信息位于自由文本 Note 中,而不是某个字段;构建过程会将 O(…) / Θ(…) 表达式提取到 bounds_mentioned 中,但这些表达式不包含变体或条件——这些精确信息仅见于整理后的表格。
  • 整理后表格中方法的界限会注明其变体(二叉堆与斐波那契堆;期望情况与最坏情况)。请勿将它们合并。
  • Rosetta 的语言章节名称沿用 wiki 中的拼写(C++、C#、Icon and Unicon);language 参数会对完整名称或前缀进行不区分大小写的匹配。

快速开始

添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):

{
  "mcpServers": {
    "algorithm-finder": {
      "url": "https://gateway.pipeworx.io/algorithm-finder/mcp"
    }
  }
}
此端点实际提供的内容

https://gateway.pipeworx.io/algorithm-finder/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、 discover_tools、search_within、remember/recall 和网关范围内的其他工具。因此,你看到的工具数量会多于此表:目前,单个工具包端点会在该工具包自身工具之外列出约 30 个共享工具。连接的 initialize 响应会说明其确切范围,是当天适用情况的权威信息。

这是有意为之,并非意外的多路复用。元工具可让限定范围的连接回答此工具包未涵盖的问题——通过 ask_pipeworx 跨整个目录路由——无需添加第二个 MCP 服务。目前无法挂载不含这些工具的工具包端点;如果额外的架构定义占用的上下文多于路由功能带来的价值,请连接一次完整网关,而不要连接多个工具包端点。

或者连接完整的 Pipeworx 网关,直接列出所有工具包的工具,而不只是此工具包的工具:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

两个 URL 都连接到同一网关和相同的 1872+ 个数据源。唯一的区别在于直接列出的是哪个工具包的工具;ask_pipeworx 可从任一端点访问所有工具。

没有 MCP 客户端?通过 HTTP 调用

curl -X POST https://gateway.pipeworx.io/v1/tools/algorithm_find \
  -H 'Content-Type: application/json' \
  -d '{"problem":"all-pairs shortest paths","want":"both"}'

首次调用无需账户。检查任意工具:GET https://gateway.pipeworx.io/v1/tools/algorithm_find。查找工具:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。

独立运行(无需网关账户)

此软件包也可作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需经过网关往返:

{
  "mcpServers": {
    "algorithm-finder": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-algorithm-finder"]
    }
  }
}

也可以直接运行,以确认它能够启动:

npx -y @pipeworx/mcp-algorithm-finder

它通过 stdin/stdout 使用 MCP 协议,并响应 initialize/tools/list/tools/call,仅提供此工具包的工具——不包含上述网关连接额外提供的任何共享元工具。来源相同,工具相同,但没有 ask_pipeworx 路由。

使用 ask_pipeworx

你可以用通俗英语提问,而不是直接调用工具——此功能既适用于上面的工具包端点,也适用于完整网关:

ask_pipeworx({ question: "your question about Algorithm Finder data" })

网关会自动选择合适的工具并填入参数。

更多信息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。