Skip to content

Releases: NeoXider/neoxider-mcp-hub

v0.10.3

Choose a tag to compare

@github-actions github-actions released this 28 Oct 17:58

Fixed

  • A hub call written as text now runs in DeepSeek Harness. A local server such as
    Strata or llama-server turns <tool_call> text into a tool call only when the name
    matches a declared tool, and a model that had seen the hub as
    mcp__capability_hub__capability_hub kept writing variants of it
    (mcp__capability_hub, mcp__capability-hub__…) after the native tool became
    capability_hub. Each such call came back as message text and the turn ended. The
    Harness plugin now watches the model stream (llm/stream) of every request that
    offers the hub. When a reply has no structured tool call and its text ends in written
    calls to the hub, under any of those spellings, they become real capability_hub
    calls, and the text keeps only what came before them. Qwen's XML format and the JSON
    form are read, with values typed by the tool schema. Text that only quotes a call (in
    a code fence, or followed by more prose), a call cut off mid-way, a truncated reply,
    and calls to other tools are left as they are. No alias tool is registered, so the
    prompt does not grow.

v0.10.2

Choose a tag to compare

@github-actions github-actions released this 28 Oct 17:29

Fixed

  • The tool schema uses only keywords every client accepts. It advertised
    maxLength on five strings, and propertyNames with an empty-schema
    additionalProperties on arguments. DeepSeek Harness checks tool schemas against
    a smaller subset, so its run_code signatures typed the whole hub input as
    unknown; strict validators and constrained decoders trip on the same keywords.
    The limits are now checked on input instead of advertised, arguments is a bare
    object with additionalProperties: true, and the schema is 27 tokens shorter. An
    e2e test holds the advertised schema to that subset.
  • The Harness plugin loads from a checkout. It imported @deepseek-ai/dsh-tools
    and @deepseek-ai/schemastery at runtime, and from a linked or path-loaded checkout
    those resolve against the repository's own node_modules, not the Harness, so the
    plugin ran against whatever old dsh-tools was installed there. It now registers a
    raw tool definition, the form the in-box MCP client registers, and its Config is a
    zod schema, which cordis validates through Standard Schema. Both Harness packages are
    gone from the peer dependencies.
  • The native tool's parameters are the stdio server's. The plugin had its own
    hand-written copy of the schema; it now projects hubInputShape the way the MCP SDK
    does, so the two routes put the same tool in the prompt, and a test holds them equal.
  • Bad arguments to the native tool get a readable error. Nothing checked them, so
    an unknown action reached the hub and failed with a TypeError. They are now
    validated as on the stdio route, and the error lists what was expected.

Added

  • toolCallTimeoutMs Config for the native tool, defaulting to the previous
    300,000 ms, so a setup that raised the MCP client's timeout keeps it after switching.

Documentation

  • README: loading a built checkout by path, and why a local model is better off with
    the native capability_hub than with mcp__capability_hub__capability_hub.
  • README: every client example names the server capability_hub. The Claude Code and
    mcpServers examples said capability-hub, so the same tool appeared under two
    spellings across clients.

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 27 Oct 10:13

Added

  • The package is on npm as @neoxider/mcp-hub. npx -y @neoxider/mcp-hub --catalog … --state … starts the server with nothing to clone or build. The package has four
    executables, so npx could not tell which to run; mcp-hub (the package's own name)
    now points at the server.

Changed

  • The Harness peer dependencies are optional. @deepseek-ai/dsh-tools and
    @deepseek-ai/schemastery are needed only by the Harness plugin entry, which Harness
    itself supplies; npm 7+ installs peers by default, so everyone running the plain
    server was pulling them in.
  • publishConfig.access is public, which a scoped package needs.

Documentation

  • README: client setup uses npx, with the persistent-catalog advice that goes with it
    (under npx the package's own data/ is in a clearable cache), and approval through
    npx -p @neoxider/mcp-hub capability-hub-admin.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 09:21

Fixed

  • Skills and long results reached OpenCode as a stub. OpenCode renders a tool
    result's structuredContent and ignores its text, while DeepSeek Harness does the
    opposite. skill.load returned the body only as text, so OpenCode showed
    {"name":…,"source":…} and nothing else; a paged call result and every page
    showed only {"paged":true,"cursor":…}. The body now travels in both fields:
    instructions for skill.load, text for page 1 and for page. Harness reads the
    text and is unchanged.
  • disable no longer fails when the child dies while closing. The capability was
    already off the live map, so the error told the model to retry something that had
    worked.
  • A failed tools/list_changed refresh no longer escapes. The previous tool list is
    kept and the failure is logged to stderr.
  • Pages and truncated results no longer cut an emoji in half. A cut between the two
    halves of a surrogate pair left a replacement character on each side.
  • The client's own quick-start command failed in Windows PowerShell 5.1. It strips
    the double quotes from --json '{"action":"search"}', so node received
    {action:search}. The client now takes --action, --query, --kind, --name,
    --tool and --cursor as plain flags, and a request that is not valid JSON says to
    use --input request.json or those flags instead of printing a stack trace.
  • capability-hub-admin approve defaulted to the working directory. Run from any
    other folder it looked for data/ there, not where the server reads, so an approval
    could not land in the server's state. Its defaults are now the server's: the package's
    data/catalog.json and data/state.
  • A flag followed by another flag took it as its value. --catalog --state dir read
    --state as a catalog path.
  • A bad --page-chars or CAPABILITY_HUB_PAGE_CHARS says what is wrong. It used to
    exit with a stack trace from the constructor. An empty value is ignored instead of
    silently turning paging off.

Security

  • zod 4.1.12 -> 4.6.7 (memory exhaustion on oversized constrained collections, fixed
    in 4.6.6) and the transitive body-parser 2.3.0 -> 2.4.0 (denial of service through
    trailing bytes after a compressed request body, fixed in 2.4.0; it comes with the MCP
    SDK's HTTP server, which this hub does not run). pnpm audit --prod had started to
    fail CI again; it is clean.

Changed

  • tools with a query matches words, not the whole phrase. "browser click" now
    finds browser_click. Every word must appear; when no tool holds them all, the tools
    that hold some come back best first with a note saying so, instead of an empty list.
    search over the catalog already worked this way.

Documentation

  • README rewritten around what the project is for: a cover and four illustrations,
    setup for OpenCode, Claude Code, Claude Desktop and Cursor besides DeepSeek Harness,
    how to share one catalog between clients, troubleshooting, and a comparison with the
    neighbouring projects built from their own READMEs. The measurements are unchanged.
  • The tool-selection accuracy table rendered broken: its header had seven columns and
    its separator six.
  • The model-in-the-loop smoke documentation moved to docs/harness-smoke.md.
  • The product is called NeoXider MCP Hub; the tool stays capability_hub.

Repository

  • Pushing a v* tag now runs the tests, builds the Harness bundle and attaches it to a
    GitHub release. Releases 0.8.0 to 0.9.1 had no bundle attached.
  • Two committed build artifacts (*.tgz) were removed and *.tgz is ignored.

0.8.0

Choose a tag to compare

@NeoXider NeoXider released this 15 Sep 20:41

Structured call arguments: action call now accepts the child tool arguments as a structured object under arguments, alongside payloadJson. Declaring the field makes it survive MCP SDK input validation on both stdio and native paths; passing both is an error, and arguments with any other action is an error. New wire unit tests plus an end-to-end leg.

v0.7.0

Choose a tag to compare

@NeoXider NeoXider released this 14 Sep 10:02

Native DeepSeek Harness bundle: the hub registers as one native model-facing
tool (capability_hub) with no child process and no absolute paths.

Install:

dsh plugin --profile web add https://github.com/NeoXider/neoxider-mcp-hub/releases/download/v0.7.0/neoxider-mcp-hub-0.7.0.tgz

NeoXider MCP Hub v0.3.1

Choose a tag to compare

@NeoXider NeoXider released this 27 Aug 18:44

Full Changelog: v0.3.0...v0.3.1

DeepSeek Capability Hub v0.3.0

Choose a tag to compare

@NeoXider NeoXider released this 27 Aug 04:24

Full Changelog: v0.2.4...v0.3.0

DeepSeek Capability Hub v0.2.4

Choose a tag to compare

@NeoXider NeoXider released this 26 Aug 19:35

Verified lazy MCP and skill routing through one universal Harness tool. Includes compact context-economy evidence, package allowlist hardening, and an optional strict end-to-end DeepSeek Harness smoke in which LM Studio Qwen 3.5 2B discovers, inspects, enables, calls, and disables the pinned @playwright/mcp@0.0.79 with zero tool errors. CI passes on Windows and Ubuntu.

DeepSeek Capability Hub v0.2.1

Choose a tag to compare

@NeoXider NeoXider released this 26 Aug 09:52

Verified strict Harness smoke

  • Uses exactly one outer MCP tool.
  • Proves search, inspect, tools, call, skill loading, status, and disable in one live DeepSeek Harness session.
  • Auto-selects the smallest installed LM Studio tool-use model without downloading anything.
  • Unloads only a model loaded by the smoke.
  • Verifies approved Web Search Neo and Unity CLI catalog metadata.
  • CI passes on Windows and Ubuntu.

Security boundary: third-party MCP entries still require separate human approval before they can execute.