Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
A true MCP server where the agent is the model and the API key. No API keys.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"agent-as-model": {
"command": "uvx",
"args": [
"agent-as-model"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add agent-as-model -- uvx agent-as-model프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"agent-as-model": {
"command": "uvx",
"args": [
"agent-as-model"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"agent-as-model": {
"type": "stdio",
"command": "uvx",
"args": [
"agent-as-model"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 fernandogarzaaa 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.2.0)은 18일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Apify MCP Server
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store ⚡
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
A true MCP server where the agent is the model and the API key.
mcp-name: io.github.fernandogarzaaa/agent-as-model
uvx agent-as-model
One-click install for VS Code:
The deep link carries the server's real install config ({"name":"agent-as-model","command":"uvx","args":["agent-as-model"]}) URL-encoded in the vscode:mcp/install? handler, the format from the official VS Code MCP developer guide.
This server does its work through MCP sampling, so one-click install and the guides below are scoped to sampling-capable hosts: VS Code, Goose, fast-agent, and opencode. Claude Code and Cursor are excluded until they implement sampling. The manual Claude Code instructions further down stay for anyone who wants to experiment anyway.
Add to ~/.config/goose/config.yaml (or use goose configure and pick Add Extension, Command-line Extension):
extensions:
agent-as-model: enabled: true type: stdio name: agent-as-model cmd: uvx args: ["agent-as-model"] timeout: 300
Add under mcp.servers in fastagent.config.yaml, then include agent-as-model in your agent's servers=[...] list:
mcp:
servers: agent-as-model: transport: "stdio" command: "uvx" args: ["agent-as-model"]
opencode mcp add agent-as-model -- uvx agent-as-model
Or in opencode.json (project root or ~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json", "mcp": { "agent-as-model": { "type": "local", "command": ["uvx", "agent-as-model"] } } }
Claude Code (kept as manual instructions; excluded from one-click until sampling is implemented):
claude mcp add agent-as-model -- uvx agent-as-model
Any client that takes MCP JSON, paste this:
{
"mcpServers": { "agent-as-model": { "command": "uvx", "args": ["agent-as-model"] } } }
Requires Python 3.10+ and a host that declares the MCP sampling capability. No API keys, ever.
From a local checkout: python -m agent_as_model. From the repo without installing: uvx --from git+https://github.com/fernandogarzaaa/agent-as-model agent-as-model.
AI products usually demand a model API key before they do anything useful. This server flips that around. The tools speak the request shapes products already use, and the intelligence comes from the agent on the other end of the MCP connection. The agent is the model. The agent is the key.
chat_complete — OpenAI chat-completions-shaped request, completion text back.
{
"messages": [ {"role": "system", "content": "You are terse."}, {"role": "user", "content": "Explain MCP sampling."} ], "model": "agent-default", "temperature": 0.7, "max_tokens": 500 }
messages_create — Anthropic messages-shaped request, completion text back. system accepts a string or a list of text blocks. Message content accepts a string or a list of text blocks.
responses_create — OpenAI Responses API-shaped request, Responses API response object back. input is a string (one user message) or a list of input items {role, content}: role is user, assistant, system, or developer; content is a string or a list of text parts ({type: "input_text"|"text", input_text: "..."}). System and developer items fold into the system prompt alongside instructions, which leads. Non-text parts are rejected. max_tokens keeps the name from the other tools (the Responses API calls it max_output_tokens). output_schema, tools, tool_choice, and persona behave exactly as on the other completion tools.
The returned object is {"id": "resp_ ", "object": "response", "model": , "output": [...]}. A plain-text host answer becomes a single message item with one output_text block. When the host answers by calling tools, the accompanying text (when non-empty) becomes a message item and each tool call becomes a function_call item: {"type": "function_call", "id": "fc_ ", "call_id": " ", "name": "...", "arguments": " "}; the host's tool-call id maps to call_id and the object id is derived from it.
generate — raw prompt string in, completion text out, same host model, no chat formatting. The thin path for callers that do not need chat shapes: the prompt is sent as a single user sampling message with no system prompt and no role translation. model, temperature, and max_tokens behave exactly as on the other tools; there are no tools, output_schema, or tool_choice parameters, because those are chat-tool features and generate is zero overhead. It does accept the optional persona contract, which is request/response validation only and adds no sampling overhead.
list_models — returns the one model this server offers: agent-default, an alias for the host agent's own model.
Structured output — the three chat-shaped completion tools accept an optional output_schema (a JSON Schema object with root type object). When given, the sampling request carries exactly one tool whose input schema is that schema, marked as the required tool choice: the host must answer by invoking the tool, so its tool-use input is the structured completion. The server validates that input against the schema and returns it as JSON text. A host answer that violates the schema fails loudly; bad output is never returned silently. The schema itself is validated up front, so a malformed schema is the caller's error, not a mid-flow surprise.
Tool-use passthrough — the three chat-shaped completion tools also accept tools, a list of tool definitions ({name, description, input_schema} with input_schema a JSON Schema object with root type object), and tool_choice (auto/required/none, default auto). The definitions are validated up front (non-empty unique names, valid object schemas) and forwarded to the host's model in the sampling request on both protocol eras. Forwarding is fenced by the host's sampling.tools capability: a host that does not advertise it gets a tool-free request instead, the degradation is logged server-side as a warning, and the call returns plain text. When the host answers by calling tools, the tool returns JSON text in this stable shape (keys sorted): {"text": "...", "tool_calls": [{"id": "...", "input": {...}, "name": "..."}]}. A plain-text host answer returns text as before. Passing both tools and output_schema is an error: output_schema is already implemented as one required tool, so combining them is contradictory.
Personas — all four completion tools (chat_complete, messages_create, responses_create, and generate) accept an optional persona ({name, input_schema, output_schema}). The server is stateless: there is no persona registry, the host supplies the persona per call, and the same validation runs on both protocol eras. Before anything is sent, the persona itself is validated (name required and non-empty; input_schema and output_schema, when given, must be valid JSON Schema objects with root type object), and the tool's request arguments are validated against input_schema when given. The validated request object is the tool's parameter set with defaults applied, minus persona itself: messages, model, temperature, max_tokens, output_schema, tools, tool_choice for chat_complete (plus system for messages_create), and prompt, model, temperature, max_tokens for generate. After the host answers, the completion text must parse as JSON validating against output_schema when given; invalid output fails loudly, naming the persona. Unlike output_schema, a persona's output_schema does not change the sampling request (no required tool is injected): the host answers in plain text and the server parses it. Passing both output_schema and persona.output_schema is an error: the two are contradictory sources of the structured-output contract.
Continuing a conversation — the server keeps no session state, so multi-turn continuations are host-owned. All four completion tools accept an optional previous_response_id, and every completion response carries a cursor you pass back to continue. The cursor is cur_ + sha256 over the canonical JSON {"model","tool","transcript"} (sorted keys, compact separators), the transcript being the conversation through the assistant turn: a tamper-evident commitment, deterministic, so you can recompute it yourself. Pass "" to start a chain. To continue, pass the accumulated history back in (including the previous assistant turn, exactly as received) with the previous turn's cursor: the server recomputes the cursor over your history and fails loud, naming expected vs received, if it does not match. A responses_create response id (resp_...) anchors a new chain instead of failing, since opaque ids commit to nothing. When previous_response_id is given, the text tools return {"completion": " ", "response_id": "cur_<...>"} instead of plain text; responses_create carries the cursor in its id field. Omit previous_response_id and everything behaves exactly as before. To branch from an earlier turn, truncate the history to that turn and pass its cursor. On generate (no structured history channel) a cur_ cursor fails loud rather than silently skipping verification; pass "" to mint a cursor over the current prompt and completion.
chat_complete with ordinary chat messages.sampling/createMessage request. On 2026-07-28+ the server returns a multi-round-trip InputRequiredResult carrying the full payload instead of calling the sampling API, and the completion arrives on the retry round. One tool body serves both eras.model argument is passed to the host as a model hint only; agent-default means "your own model".MISSING_REQUIRED_CLIENT_CAPABILITY error, not a silent failure. The 2026-07-28+ MRTR path needs no sampling capability at all.output_schema on both completion tools, server-side validation with the jsonschema package).tools/tool_choice on both completion tools, fenced by the host's sampling.tools capability with explicit pl앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요