DSH ⇄ ChatGPT Fusion Gateway

DSH ⇄ ChatGPT Fusion Gateway

Enables DeepSeek Harness agents to use ChatGPT Web as an external, stateless reasoning provider while keeping DSH as the single agent runtime.

Category
Visit Server

README

DSH ⇄ ChatGPT Fusion Gateway

A minimal MCP bridge that keeps DeepSeek Harness (DSH) as the single agent and runtime, and uses ChatGPT Web only as a stateless, single-turn reasoning provider.

DSH owns agents, tools, permissions, sessions, compaction, subagents, workflows, goals, and real file/shell execution. The gateway simply relays one immutable DSH context snapshot to a ChatGPT "Brain" conversation, and relays back exactly one decision — a final answer, one action proposal, or a bounded read-only batch. The Gateway never executes the proposed action itself.

User
 ↓
DSH UI
 ↓
DSH Native Agent Loop  →  Context / Compaction
 ↓
ChatGPT Fusion LLM Adapter
 ↓
Fusion Reasoning Gateway          ← this repository
 ↓
ChatGPT Brain Worker              (a dedicated ChatGPT Web conversation + optional wake extension)
 ↓
final | action_proposal | readonly_batch
 ↓
Gateway validation
 ↓
DSH Permissions / ToolRuntime  →  DSH Native Tool  →  Next DSH Tick

Features

  • Strict one-result reasoning contract — every request carries one complete, immutable snapshot; the Brain returns exactly one terminal result (final, action_proposal, or a bounded readonly_batch of read/glob/grep).
  • Recoverable delivery — requests are journaled to disk; a crashed Gateway restores in-flight claims instead of losing them. Retries are idempotent via snapshot + nonce.
  • Multi-worker failover — several Brain conversations can back the same model route; a stalled claim is released and re-delivered to a healthy standby with a rotated nonce.
  • OAuth 2.0 (loopback) — optional authorization for the public ChatGPT connector (/brain-mcp), with rotating access/refresh tokens.
  • Cross-platform — the gateway and Node daemon run on Linux, macOS, and Windows.
  • Optional browser wake — a Chrome extension (browser-autowake/) polls loopback queue metadata and wakes a route-bound Brain tab when work is waiting.

Requirements

  • Node.js 18+ (uses the global fetch).
  • git (and, on Linux, your configured command user) for the workspace tools.

DSH itself must be available for the DSH-native agent loop and tool runtime; the gateway detects the DSH-bundled node_modules automatically, or you can point it there with the DSH_NODE_MODULES environment variable.

Quick start

git clone <your-repo-url>
cd dsh-chatgpt-mcp
npm install

Put real credentials into config.json and model-bindings.json (all values ship as REDACTED_* placeholders), then start:

npm run daemon:start     # background, supervised with auto-restart
npm run daemon:status

…or run in the foreground:

npm start                # node server.strict.cjs

The gateway binds http://127.0.0.1:7688. Detailed architecture and invariants live in ARCHITECTURE.md.

Configuration

config.json

Key Meaning
host / port Loopback bind address (default 127.0.0.1:7688).
workspaceRoot Project workspace the tools may access. . = the project root.
ownerPassword Owner password for OAuth authorization (≥ 16 chars).
staticToken Static bearer token for the loopback Brain MCP (≥ 32 chars).
allowedPrograms Executables the workspace run_command tool may launch.
commandUser Linux-only: user the sandboxed commands drop to via setpriv.

ownerPassword, staticToken, and the binding keys are required and must be filled in before use. On macOS/Windows there is no portable setuid helper, so sandboxed commands run as the current user and commandUser is ignored.

model-bindings.json

Maps each modelId + reasoningEffort route to a bindingKey. The bindingKey is the secret shared with the matching brain-worker-*.txt; keep both in sync.

Service control

Works identically on Linux, macOS, and Windows:

node scripts/daemon.mjs start      # start detached supervisor + server
node scripts/daemon.mjs stop
node scripts/daemon.mjs restart
node scripts/daemon.mjs status

These are also exposed as npm run daemon:start|stop|restart|status. Linux-only screen-based scripts remain in scripts/ (control.sh, public_quick.sh, …) for Cloudflare quick-tunnel and the headless Chrome worker pools.

Reasoning protocol (v4)

The gateways speaks a strict protocol to the ChatGPT "Brain":

fusion_wait_for_reasoning_request  →  one immutable snapshot + data-only action catalog
fusion_submit_reasoning_result     →  exactly one {final} | {action_proposal} | {readonly_batch}
fusion_fail_reasoning_request      →  terminal failure for the assigned snapshot

actionCatalog is data only — a description of the DSH native tools, never installed as ChatGPT/MCP tools. An action_proposal is a recommendation that DSH later executes under its own permission/sandbox policy; the Gateway does not run it.

The public endpoint is GET|POST /brain-mcp. The former /mcp and /fusion/tasks… routes return HTTP 410 (disabled).

Permissions

Uses the native three-level DSH model — read-only, workspace-write, danger-full-access — with workspace-write as the default.

Repository layout

server.strict.cjs        active gateway (strict v4; no legacy /mcp)
server.cjs               full gateway incl. workspace file/shell tools
config.json              runtime configuration (secrets are placeholders)
model-bindings.json      modelId → bindingKey map
scripts/daemon.mjs       cross-platform daemon (start/stop/restart/status)
scripts/*.sh             Linux deployment helpers (screen, cloudflared, Chrome workers)
brain-worker-*.txt       per-route prompts for dedicated Brain conversations
browser-autowake/        optional Chrome extension that wakes Brain tabs
tests/                   selftests and headless integration workers
state/  logs/            runtime artifacts (gitignored)

Testing

npm install
node tests/reasoning-contract-v4-selftest.mjs   # primary protocol test
# …plus oauth, worker-recovery, failover, context-overflow, payload-limit selftests

See the ## Verification section of the implementation notes for the full matrix.

Security notes

  • Bind to 127.0.0.1 by default; only the quick-tunnel script exposes a public URL.
  • Do not commit config.json or model-bindings.json with real secrets — this repository ships placeholders for that reason.
  • /bin/setpriv is used on Linux to drop sandboxed commands to commandUser; on other platforms commands run as the current user.

DSH ⇄ ChatGPT Fusion is a community bridge and is not affiliated with or endorsed by OpenAI or DeepSeek. Use of ChatGPT is subject to OpenAI's terms of service.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured