6502tinymachines

MCP

POST /mcp は Model Context Protocol をストリーマブル HTTP で話す。セッション無し、SSE ストリーム無し。API がセッションを持たないのと同じ理由だ。

ツールは五つ: console_specassemblerunmint_cartridgechip_atlas

クライアントをつなぐ

チップのエンドポイントと、サイトのエンドポイント。後者には、各ピースが何で、いまどれが応答しているかを答える三つのツールがある:

https://6502.tinymachines.ai/api/mcp
https://tinymachines.ai/api/mcp

Claude Code なら:

claude mcp add --transport http 6502 https://6502.tinymachines.ai/api/mcp
claude mcp add --transport http tinymachines https://tinymachines.ai/api/mcp

mcpServers ブロックを読むクライアント (Claude Desktop、Cursor など) なら:

{
  "mcpServers": {
    "6502": { "type": "http", "url": "https://6502.tinymachines.ai/api/mcp" },
    "tinymachines": { "type": "http", "url": "https://tinymachines.ai/api/mcp" }
  }
}

鍵も、セッションヘッダも、開くべきストリームも無い。どちらのサーバもプロトコルの 2025-06-182025-03-262024-11-05 の各改訂を話す。それより新しい改訂を求めるクライアントには、この中で最新のもので応える。これはプロトコルが定める通りの振る舞いだ。どちらのエンドポイントへの GETAllow: POST 付きの 405: SSE ストリームは無く、まず GET でストリームを開く旧い HTTP+SSE トランスポートは話さない。

HTTP ルートが細粒度である一方、ツールは粗い

これは設計であって、見落としではない。

API がステートレスなのは、プログラムがマシンを保持するからだ: 2 KB の 16 進数が出て行って戻ってきて、クライアントの持つ写しがセッションになる。 MCP のクライアントは言語モデルであり、モデルは 2 KB の 16 進数を有用な形で保持できない。だから run は、アセンブルし、ブートし、ステップし、報告するまでを一度の呼び出しで済ませ、マシンはサーバを離れない。

run は画面を描画する

run は画面を、1 セルあたり 16 進数 2 文字で描画する。

6502 のゲーム作りを当てずっぽうから作業に変えるのは、この一点だ: アセンブラはバイト列が合法だと言うだけで、プログラムが正しいと言うのは画だけだ。

何が正直さを保っているか

MCP のスイートは、表を引く代わりに、このプロジェクト自身の証人を再現する。 $2E + $14 は半サイクル 41 までに $0082$42 と読める。これはプログラムのページ、API リファレンス、サービスのスイートが揃って述べる数字だ。

その経路のどこにも命令表を引くものが無いので、一致は言い換えではなく証拠になる。