Jae Wilson @DataCrew
webinar

MCPs vs Skills — The Debate (with Jon Tiritilli, Domo Principal Engineer)

April 29, 2026

I hosted a live debate on MCPs vs Skills with Jon Tiritilli (Principal Engineer, Domo) and community members from the Domo User Group. The conversation went deeper than I expected — we covered security, context rot, authentication, and whether the "vs" framing even makes sense.

What MCPs Actually Are

MCP stands for Model Context Protocol — Anthropic's 2024 specification for how LLMs discover and call tools on external systems. Someone called it "the USB-C for AI agents." The core idea: Claude generates JSON (a function call), the MCP server receives it, executes the function, and returns the result.

An MCP server is just a collection of tools — functions with descriptions that Claude reads to decide which one to call. You can build one with fastmcp, define your tools, and Claude figures out the rest.

The Security Question

This is the one people don't think about enough. When you give credentials to a remote MCP server, you're authorizing it to act on your behalf. If you're using Domo's hosted MCP, you're passing them your access token. If you're using some random MCP on the internet, you're giving that server your GitHub credentials, your email credentials, whatever.

Local MCPs (running on your machine) are safe. Cloud-hosted MCPs are a different story. You should understand what the MCP is capable of — can it delete data? Create users? Send emails? Every week there's a story about someone's GitHub repo getting deleted or someone spending $10K on API calls because they gave an agent unfettered access.

MCPs have solved this with OAuth and refresh tokens — you're not storing raw credentials in the config anymore. But the fundamental question remains: who holds your credentials, and what can they do with them?

Context Rot

As you add more MCP tools, Claude's context window fills up with tool definitions. Every tool description, every parameter spec — it all counts against your token budget. The more tools you register, the less room Claude has for actual reasoning.

Skills solve this with lazy loading and progressive disclosure. A skill is only loaded when it's needed. You can have 50 skills and Claude only sees the ones relevant to the current task. MCPs don't have this yet — every connected tool is always in context.

The Overlap: Same Function, Different Wrapper

Here's where the "vs" framing breaks down. The same function can be a skill or an MCP tool. The logic is identical. The only difference is the wrapper:

  • As a skill: a markdown file in .agents/skills/ that Claude reads when needed
  • As an MCP tool: a function decorated with @mcp.tool() that Claude calls via the MCP protocol

Jon and Elliot both made this point: it's an implementation decision, not an architectural one. You choose the wrapper based on how you want to distribute and access the tool.

When to Use What

MCPs make sense for:

  • Exploratory analytics — "Hey Claude, put a dashboard together for me"
  • Non-technical users who can't write code but can ask Claude to do things
  • Platform integrations — one MCP per external system (Domo, GitHub, Slack)
  • Getting a first draft of a data product without starting from scratch

Skills/runbooks make sense for:

  • Repeatable DevOps workflows — upsert user, manage roles, configure allow lists
  • Scheduled operations you'd waste tokens asking Claude to regenerate
  • Personal workflows that are hyper-specific to how you work
  • Team-shared SOPs that need to be version-controlled and auditable

The hybrid approach:

  • Use MCPs for platform integrations (one MCP per external system)
  • Use skills for personal workflows and local development
  • Use runbooks for team-shared processes that need to be consistent

Strong Opinions Held Loosely

I started by building MCPs for everything. Then I switched to skills for everything. Then I wrote runbooks for everything. Now runbooks are breaking on me too. The honest answer is that the ecosystem is still evolving, and the right tool depends on the use case.

Jon's framing is the right one: strong opinions held loosely. Have a position, but be willing to change it when the technology or your use case evolves.

Guests

  • Jon Tiritilli — Principal Applied AI Engineer, Domo (LinkedIn)
  • Elliot — Domo community member
  • Alec, Jeff, Jake — community attendees

Video chapters:


This was a Domo User Group webinar. Join the conversation at domousergroup.slack.com.

Resources

Slides and supplementary material for this post.

↓ download

Related

More posts on similar topics.

Got a project in mind?

hire me →

Getting value from the content but not ready to hire?

let's call it professional development

☕ buy me a coffee →

Want a practitioner take on Domo and AI, every month?

free, no spam, unsubscribe anytime

📰 subscribe to the digest →