Skip to main content

MCP resources–The piece everyone overlooks

I think it is hard to miss the buzz around the Model Context Protocol (MCP), the so-called USB-C for AI apps. What I noticed is that the main focus is on tools. GitHub integration tools, file system tools, API tools—the list goes on. Tools are powerful, they're exciting, and they let AI agents take action in your development environment.

But the protocol exposes 2 other types of primitives what almost nobody talks about: Resources and Prompts.

And that's a shame, because both might be underrated in the entire MCP specification.

My goal of this post is to give at least MCP Resources the attention it deserves. Let’s dive in!

The tools-only tunnel vision

When Anthropic released MCP, the developer community immediately gravitated toward tools. It makes sense—tools are action-oriented and flashy. They let your AI agent create GitHub issues, run terminal commands, and interact with APIs. That's the kind of capability that makes for great demos.

But MCP wasn't designed around tools alone. The protocol defines three core primitives that work together:

  1. Tools - Model-controlled actions with side effects
  2. Resources - Application-controlled context and data
  3. Prompts - User-controlled interaction workflows

Most tutorials, articles, and examples focus exclusively on tools, treating MCP as if it's just a fancy function-calling protocol. This misses the bigger picture entirely.

What are MCP resources?

Think of resources as context providers for your AI conversations. While tools let the AI do things, resources let the AI know things.

Resources in MCP are any data that can provide context to language models:

  • Files and directory structures
  • Database schemas and table contents
  • API documentation and specifications
  • Application logs (potentially with real-time updates)
  • Configuration files
  • Design assets and specifications
  • Really, any structured or unstructured data your AI might need to reference

Each resource is uniquely identified by a URI (like file:///project/readme.md or db://users/schema) and can include metadata like a human-readable name, description, and MIME type.

Why resources matter

Here's the key insight: AI agents need context just as much as they need capabilities.

Imagine asking Claude to help debug your application. With tools alone, Claude could:

  • Execute code
  • Run tests
  • Query your database

But without resources, Claude would be flying blind. It wouldn't have access to:

  • Your application logs showing the actual error
  • Your database schema to understand the data structure
  • Your API documentation to know what endpoints exist
  • Your configuration files to see how things are set up

Resources bridge this gap. They give Claude the information it needs to make informed decisions before taking action.

Resources vs Tools: When to use what

The distinction is actually quite elegant:

Use resources when:

  • Providing read-only context and information
  • Sharing reference materials (docs, schemas, specs)
  • Exposing data that changes over time (logs, metrics)
  • Giving AI access to your knowledge base
  • You want the user/application to control what's shared

Use tools when:

  • Performing actions with side effects
  • Creating, updating, or deleting data
  • Executing commands or running processes
  • Triggering external API calls
  • You want the AI model to decide when to act

Think of it this way: resources are like giving someone a library card, tools are like giving them a set of keys.

Real-world resource examples?

Here is a sad reality, I checked some of the most popular MCP servers available at MCP Registry but I couldn’t find any that was using resources. 

What's next

I only scratched the surface on MCP resources. So I have planned to write some follow-up posts where we'll explore:

  • How to use resources in VS Code and Visual Studio
  • Building your own MCP resource server from scratch
  • Advanced features like templates, subscriptions, and binary resources

MCP resources are not used a lot in the wild but I want to dig deeper…

More information

Resources - Model Context Protocol

Popular posts from this blog

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

.NET 8–Keyed/Named Services

A feature that a lot of IoC container libraries support but that was missing in the default DI container provided by Microsoft is the support for Keyed or Named Services. This feature allows you to register the same type multiple times using different names, allowing you to resolve a specific instance based on the circumstances. Although there is some controversy if supporting this feature is a good idea or not, it certainly can be handy. To support this feature a new interface IKeyedServiceProvider got introduced in .NET 8 providing 2 new methods on our ServiceProvider instance: object? GetKeyedService(Type serviceType, object? serviceKey); object GetRequiredKeyedService(Type serviceType, object? serviceKey); To use it, we need to register our service using one of the new extension methods: Resolving the service can be done either through the FromKeyedServices attribute: or by injecting the IKeyedServiceProvider interface and calling the GetRequiredKeyedServic...

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t...