From Specialist Agents to Distributed Skills over MCP A developer's ski resort demo compared two multi-agent architectures — specialist agents invoked via Agent-to-Agent (A2A) versus distributed Agent Skills and typed tools served over Model Context Protocol (MCP) — and found the skills path removes the specialist's own nested reasoning loop while keeping services, domain boundaries, and data distributed. In the MCP design, the weather service publishes a description, a SKILL.md document, and typed MCP tools, and the parent advisor host, managed with Microsoft Agent Framework (MAF), loads the instructions and selects domain operations itself. The author notes the migration does not mean MCP replaces A2A everywhere, since autonomous agents can remain agents while bounded competences become skills, and that loading instructions, calling operations, and producing an answer can still require several model requests. Keep your domain services distributed. Move the specialist’s instructions, not another model, into the orchestrator. A multi-agent system often starts with a straightforward design: one agent understands the user’s request, delegates to specialist agents, and combines their answers. That was the starting point for my ski resort demo. A resort advisor calls specialists for weather, safety, ski coaching, and lift traffic. Each specialist owns its instructions and tools, and the advisor invokes it through Agent-to-Agent A2A . It works. But it also raises a useful question: Does every specialist need its own model execution, or does the parent mostly need the specialist’s instructions and access to its operations? To explore that distinction, I added a second architecture to the same application: distributed Agent Skills and tools served over Model Context Protocol MCP . The services still run separately. The domain boundaries still exist. What changes is where the reasoning happens. This post compares those two paths, walks through the migration from specialist agents to distributed skills and MCP tools, and uses the demo’s execution traces to examine what changed in model calls, latency, and token consumption. Two patterns, two kinds of delegation Agent as a tool: delegate the task In the original architecture, the advisor sees each remote agent as a function it can call. For a weather question, the flow looks like this: The weather agent is an independent reasoning component. It interprets the delegated question, selects its tools, and writes a response. The advisor then interprets that response and produces the final answer. This is a good fit when the specialist needs autonomy: its own model, private context, a substantial workflow, or an independent lifecycle. Distributed skill: delegate the operation, share the instructions In the skills architecture, the weather service no longer needs a model to interpret that question. Instead, it publishes a description, a SKILL.md document, and typed MCP tools. The advisor loads the instructions when needed, receives the associated tool definitions, and uses them to select the next operation. The advisor host uses Microsoft Agent Framework MAF to manage this flow: There is no weather-agent model in this second path. There is still a weather service executing application code. A distributed skill is not an agent wrapped in Markdown. It gives the advisor a procedure to follow; the provider’s tools execute the operations that procedure calls for. | Concern | Agent as a tool | Distributed skill | |---|---|---| | What the parent discovers | A specialist agent exposed as a tool | A competence it can load | | Where specialist instructions run | In the specialist’s model context | In the parent’s model context | | Who selects domain operations | The specialist model | The parent model | | What executes remotely | A specialist agent loop and its tools | MCP tools and their backing services | | What remains distributed | Agents, services, data | Skill providers, services, data | This is not “MCP replaces A2A everywhere.” A2A and MCP address different boundaries: an autonomous agent can remain an agent, while a bounded competence can become a skill. It is also not “one agent means one model call.” Loading instructions, calling operations, and producing an answer can still require several model requests. The difference is that the migrated domain no longer adds its own nested reasoning loop. What actually migrates? | Existing component | Skills-based equivalent | |---|---| | Specialist A2A hosting | MCP hosting for that domain’s skills and tools | | Agent Card name and description | Skill discovery name and description | | Specialist system prompt | Domain procedure in an enriched SKILL.md | | Specialist tools and parameter contracts | Typed MCP tools with input and output schemas | | Business services and connectors | Remote services behind those tool handlers | | Advisor’s remote-agent function registrations | Native skill sources and MCP tool integration | | Specialist’s model loop | No equivalent inside the migrated provider | Not everything in an Agent Card belongs in a skill description. Endpoint configuration, authentication, and transport capabilities remain infrastructure concerns. Similarly, instructions about permissions do not replace authorization checks in code. The ski resort example keeps both architectures side by side. Four specialists have corresponding MCP providers: weather, safety, ski coaching, and lift traffic. A web-research agent remains an ordinary agent tool in both advisors. That hybrid choice is deliberate. Migration does not require turning every capability into the same shape. Language note: the skills advisor is Python and its four MCP providers are .NET. The A2A advisor is .NET, with Python and .NET specialists. These are independent implementation choices, not a requirement to rewrite services in another language. They explain why the examples below use both languages. Step 1: separate the competence from the agent runtime Start inside the specialist, not at its endpoint. A typical specialist combines three things: instructions, an agent/model runtime, and functions that reach the business system. Separate those responsibilities before changing the protocol. For weather, retrieving conditions and calculating the demonstration forecast already belong to a domain service. That service is the reusable part: it does not need another model to read an observation or calculate a forecast. Keep the service’s business rules, data access, and validation. Move the specialist’s instructions into a skill, expose its operations through MCP tools, and remove its model loop only if the advisor can take over operation selection and result interpretation. “No model in the provider” does not mean constant output. The demo’s telemetry changes over time, and its forecast uses randomized variation. The distinction is application logic versus another agent loop. Step 2: turn the Agent Card description into skill discovery An orchestrator does not need every specialist’s full instructions on every request. It needs enough information to decide which competence is relevant. Each provider exposes its own MCP endpoint at /skillsmcp . Its resource surface contains only: skill://index.json skill://