Tao Zhang

Skill vs Tool vs MCP vs API

One GMV report, built three ways — and a four-layer model for knowing which layer should change.

Contents

Someone on the operations team asks: “Get yesterday’s TikTok Shop GMV and write the daily summary.”

That sounds like one task. In an AI system it can produce three completely different architectures: a Skill that turns a CSV into a report, a direct Tool that fetches the number from TikTok Shop, or an MCP server plus a Skill that separates the data connection from the reporting workflow.

All three work. The interesting question is not which label is more fashionable. It is where each responsibility belongs when the request changes next month — because it will.

PART 01

What are the four layers, exactly?

Answer

An API performs the business operation. An MCP server makes selected capabilities available to AI clients. A tool is the callable action the model can take. A skill tells the model how to combine those actions into a reliable piece of work.

One nuance worth stating early, because it is the source of most confused arguments. MCP standardises what a server exposes: tools, resources and prompts. A skill is a host- or platform-level packaging convention for instructions, templates and supporting files — it is not an MCP primitive at all. That is exactly why they complement each other. MCP solves a connectivity problem. A skill solves a repeatability problem.

Skill · procedureTool · capabilityMCP · runtimeAPI · business service
Ctrl/⌘ + wheel to zoom · drag to pan · double-click to fit
Figure 1 · Every kind of change has exactly one home. Read the stack downwards to follow how a request is served; read across to see where a given change lands. A change that touches two layers at once is a sign the boundary is drawn in the wrong place.
THE TESTRead the stack downwards to see how a request gets served. Read it sideways to see which layer a change lands on. If a change lands on two layers at once, the boundary is in the wrong place.
PART 02

What does the request actually look like?

Answer

Assume the ask arrives every morning, in this shape:

Generate yesterday’s TikTok Shop GMV report for all stores. Use each store’s local business day, compare with the previous day and the same calendar day last year, and flag missing data.

The desired output is stable, which is the whole reason this is worth engineering:

the deliverable, every morning
TikTok Shop GMV Daily Report
Date: 2026-08-29 (store-local date)
 
| Store   | GMV     | Day over day | Year over year | Status       |
|---------|--------:|-------------:|---------------:|--------------|
| Store A | $12,450 |        +8.2% |         +14.6% | Complete     |
| Store B | N/A     |          N/A |            N/A | Data pending |
 
Notes
- Store B: no finalized settlement record at report time.

Now build exactly that, three ways. The figure below is the whole argument in one picture: each version puts the seam in a different place.

Skill · procedureTool · capabilityMCP · runtimeAPI · business service
Ctrl/⌘ + wheel to zoom · drag to pan · double-click to fit
Figure 2 · The three architectures differ by where the seam falls. Skill-only breaks the chain above the data. Tool-only connects the data and leaves the output undefined. MCP + Skill puts one seam at the vendor boundary and one at the policy boundary.
PART 03

What happens with a Skill alone?

Answer

In the skill-only version someone exports yesterday’s data to a CSV, or pastes a table into the conversation. The agent has no live connection to TikTok Shop at all.

tiktok-gmv-report / SKILL.md
## Input contract
- Required columns: date, shop_id, gmv
- Interpret “yesterday” in the stated store timezone.
 
## Procedure
1. Identify the requested store-local reporting date.
2. Filter the supplied data to that date and aggregate by shop.
3. Compare with the prior business day and the same date last year.
4. Mark unavailable comparisons `N/A`; never infer a value.
5. Render the approved Markdown table and notes section.
What it proves
Where it breaks
  • It preserves procedural knowledge: what “yesterday” means, which comparisons are required, how missing data is represented, and exactly what the report looks like.
  • It is fast to write. If the real complaint is “people produce inconsistent reports from the same spreadsheet,” this may be the whole fix.
  • The data still arrives by hand. No scheduled run, no retry.
  • It is fragile against the CSV. Rename a column from gmv to gross_sales and the agent needs either a revised skill or a human explanation.
LESSON 01A skill can standardise the work. It cannot create access to live data.
PART 04

What happens with a Tool alone?

Answer

Now expose a function from the application straight to the model. It calls TikTok Shop internally.

a direct tool definition
const getTikTokGmvYesterday = {
  name: "get_tiktok_gmv_yesterday",
  description:
    "Return a store's GMV for its previous local business day.",
  inputSchema: {
    type: "object",
    properties: {
      shop_id: { type: "string" },
      category: { type: "string" }
    },
    required: ["shop_id"]
  }
};

This is a real improvement. Authentication, query construction and network access now happen in code rather than in a chat window.

What it proves
Where it breaks
  • A tool gives the model an action with a contract. The schema says the action exists, which arguments are valid, and how to ask for the result.
  • That is the right abstraction for an atomic operation: get GMV for one store and one date range.
  • Nothing tells the agent how the business wants the report produced. One store or all of them? Whose timezone? Day-over-day too, or only year-over-year?
  • The tool can be perfectly implemented and still yield a different layout across turns, models and prompt wording.
The failure mode this invites
  • Teams respond by growing the tool until it is generate_entire_daily_report.
  • That looks convenient and mixes three unrelated things into one rigid function: data access, business policy, and presentation.
  • Each of those three changes on a different schedule, for a different reason, at the request of a different person.

A tool that can only be changed by all three stakeholders at once is a tool nobody changes.

LESSON 02A tool automates the action. It does not reliably encode the workflow.
PART 05

What does splitting them buy you?

Answer

For a workflow that several teams depend on, split the responsibility along the seam the first two versions kept crossing.

The MCP server wraps everything that is TikTok-specific: authentication, pagination, rate limits, retries, error normalisation, and a consistent data contract that any approved AI client can discover. Its tool surface should be composable, not report-shaped:

tiktok-shop MCP server — the tool surface
{ name: "list_shops" }
{ name: "get_gmv",   args: shop_id, date_from, date_to, category? }
{ name: "get_reporting_calendar", args: shop_id }

Notice what is absent: no daily-report template, no Slack wording, no escalation rule. Those policies do not belong in a TikTok connector. They belong in the skill:

daily-gmv-report / SKILL.md
## Procedure
1. Call `list_shops` unless a shop list was supplied.
2. Per shop, resolve the previous local business date from
   its reporting calendar.
3. Call `get_gmv` for that date, the prior business date,
   and the matching date last year.
4. Compute percentage changes deterministically. A zero
   denominator or an incomplete response renders as `N/A`,
   with the reason stated.
5. Emit the approved table, then an exceptions-only notes
   section.
 
## Guardrails
- Never mix store-local dates inside one comparison.
- Never invent a missing value.
- Preserve column order and currency formatting.

The payoff is that the system can now evolve without everything changing at once. Each kind of change has exactly one home — which is what the right-hand column of the first figure was showing.

LESSON 03MCP keeps integrations reusable. Skills keep operational behaviour consistent. Separating them is what makes both cheap to change.
PART 06

How do the three compare?

← scrolls horizontally · left stripe = the layer that carries the weight

DimensionSkill onlyTool onlyMCP + Skill
Live data accessNo supplied by handYesYes
Workflow and formatStrongImplicit and unstableStrong
Initial build costLowestLow to mediumMedium
Reuse elsewhereLimited by the input formatThe function is reusableHigh — connection and workflow are reused independently
When the API changesvendor-drivenCompensating instructions in the skillEdit the tool’s codeEdit the MCP server, once
When the policy changesbusiness-drivenEdit the skillEdit the tool, or scattered promptsEdit the skill
Best fitPrototyping a manual processA simple, self-contained actionDurable automation across several workflows
Answer

MCP + Skill is not automatically the right first implementation. If one internal app needs one read-only lookup, a direct tool is the sensible answer and the extra layer is ceremony. The architecture earns its keep when the same connection will serve multiple workflows, multiple clients, or a meaningful amount of operational policy.

PART 07

Three questions people actually ask

Answer

Can one MCP server support several skills? Can one skill use several servers?

Yes to both, and that is usually the cleanest topology. One tiktok-shop server might serve a daily GMV report skill, a product-health-check skill and a campaign-performance skill — the same trustworthy connection, three different workflows and output standards. Conversely one “cross-border daily operations” skill might orchestrate a TikTok server for GMV, a Shopify server for direct revenue, a project-management server for incident status, and a messaging server to deliver the result.

RULE OF THUMBOrganise MCP servers around systems and domains. Organise skills around jobs, roles and repeatable outcomes.

When do I write a skill, add a tool, or build a server?

the decision, in order
Does the task need live data or an external action?
├── No  → Start with a Skill.
│         Capture the procedure, the checks, the format.
└── Yes → Already available through a suitable MCP server?
          ├── Yes → Use its tools. Add a Skill if
          │         consistency matters.
          └── No  → Is this a reusable atomic action?
                    ├── One app only → a direct Tool.
                    └── Many clients → an MCP server.
 
Any multi-step workflow with rules, decisions or a
prescribed deliverable → add a Skill on top,
whichever branch you took.

Does the model see the tool schema, the skill text, or both?

Both, in some form. The tool definition gives the model the name, description and input schema it needs to select and invoke an action. The skill content supplies the sequence, the business rules, the stop conditions, the validation and the output format.

The loading mechanism is host-dependent — a platform might load every enabled tool at session start, select a subset dynamically, or fetch a skill only when its description matches the request. Do not design against any one platform’s hidden prompt layout. Design against the distinction itself.

THE DISTINCTIONSchemas define the capability boundary. Skills define the operating policy.
PART 08

What prevents a painful rewrite later?

Answer
01
Keep tools narrow and honest
get_gmv is easier to test, authorise and reuse than run_everything_for_the_daily_report.
02
Put deterministic maths in code
A model can explain an anomaly. It should not be the only source of truth for a finance-sensitive percentage.
03
Make time semantics explicit
“Yesterday” is a business rule. Name the timezone, the cutoff, the currency, the settlement status, and whether GMV is gross, net, paid or estimated.
04
Return structured results
Stable fields such as currency, timezone, data_status and as_of make both the skill and the report safer.
05
Use least privilege
A GMV reporting workflow needs read access to commerce data — not the ability to alter catalogues or issue refunds.
06
Do not adopt MCP as a badge
The protocol has real operational cost: authentication, versioning, observability, server ownership. Introduce it when reuse justifies those costs.

The model to keep

The strongest mental model is not “Skill versus MCP.” It is a division of labour:

APIthe commerce system’s actual business capability
MCPa standard gateway exposing approved AI-facing capabilities
Toolone callable action through that gateway, or directly in an app
Skillthe organisation’s repeatable way of getting a job done

For “get yesterday’s TikTok Shop GMV,” start with the smallest layer that solves the problem in front of you. If you only need a consistent report from a manually exported sheet, write the skill. If you need one automated lookup, add the tool. If TikTok Shop data is becoming shared infrastructure — reports, diagnostics, campaigns, several clients — stand up the server and let skills orchestrate it.

That is the payoff of the four-layer model. When the business changes, you already know which layer changes with it.

Related

Further reading: the MCP specification overview, and its pages on tools, resources and prompts.

This is Week 2 of a 26-week series on agent systems from first principles: capability maps, skills vs. tools, memory and context, loops, harnesses, and the patterns that separate a demo from production.

Happy learning, happy building.
Tao

Also in the newsletter.