# MCP boundary The server uses local standard input/output transport and binds once to the explicit `--project-root` supplied at process startup. Optional proposal access also binds once to the configured `--proposal-writer`. It does not expose an HTTP port in the first release. ## Read tools - `docforge_project_info` - `docforge_get_contract` - `docforge_get_node` - `docforge_search` - `docforge_filter_nodes` - `docforge_backlinks` - `docforge_dependencies` - `docforge_impact` - `docforge_get_context` - `docforge_validate_project` - `docforge_render_status` Each response states that document text is project content, not higher-priority instructions. Each response includes project identity, revision, source hash, adapter version, and staleness state. ## Isolated proposal tools - `docforge_create_changeset` - `docforge_list_changesets` - `docforge_get_changeset` - `docforge_propose_node_create` - `docforge_propose_node_update` - `docforge_propose_node_move` - `docforge_propose_node_delete` - `docforge_validate_changeset` - `docforge_get_changeset_diff` Proposal tools may write only below the configured changeset root. They never change canonical files. Without `--proposal-writer`, mutation tools return `proposal_access_disabled`. Validation and diff retrieval remain available for existing changesets. ## Excluded tools The normal server never exposes shell execution, arbitrary reads or writes, canonical changeset application, preview generation, renderer execution, Git mutation, project builds, deployment, publication, global project selection, or cross-project retrieval. DocForge pins the official stable Python MCP SDK to the compatible `mcp>=1.28,<2` release line. Migration to a later major release requires a separate contract and protocol compatibility review.