Skip to content

MCP ๐Ÿ”ฑ

The ๐Ÿ”ฑ Model Context Protocol (MCP) is a standard for ๐Ÿงฐ Tools.

Configuration

The --mcp CLI argument specifies which MCP servers are available to Agents.

If not specified it uses the built-in mcp.yaml by default.

For STDIO, the command, args & env are self-explanatory.

For Streamable HTTP (Chunked Transfer), set url: - and possibly headers: e.g. with Authorization: Bearer ${secret:XYZ}. For Server-Sent Events (SSE), use type: sse.

The timeout specifies Timeout duration, for both STDIO & HTTP; it defaults to 7 seconds.

The docs field is for a URL to link to documentation.

The boolean roots flag controls whether the current working directory is exposed; it defaults to false.

The log field controls the logging level of the MCP server, and can be set to debug, info, notice, warning, error, critical, alert and emergency. If unspecified, it defaults to the warning level. This only controls what the MCP server sends. To actually see all log messages on the client, you must start Enola with -vvvvv.

Use the names under the servers: key of a mcp.yaml in the tools: of Agents.

MCP servers are only started (or connected to), and queried for their ๐Ÿงฐ Tools, if any of the loaded --agents use them.

Secrets

Enola will replace values of ${secret:XYZ} with the secret named XYZ in args, env and headers.

Examples

Fetch

$schema: https://enola.dev/ai/agent
model: google://?model=gemini-2.5-flash
description: >
  Demo Agent with access to a fetch tool.
  CAUTION: This server can access local/internal IP addresses and may represent a security risk.
  Exercise caution when using this MCP server to ensure this does not expose any sensitive data!
instruction: >
  You are a helpful agent who can answer user questions about any web page
  by fetching its content and then summarizing it in 3 sentences.
tools:
  - modelcontextprotocol/fetch

The fetch MCP server can fetch a webpage, and extract its contents as Markdown:

enola ai -a test/agents/fetch.agent.yaml --in="What is on https://docs.enola.dev/tutorial/agents/ ?"

This needs uvx to be available; test if launching uvx mcp-server-fetch works, first.

CAUTION: This server can access local/internal IP addresses, which may represent a security risk. Exercise caution when using this MCP server to ensure this does not expose any sensitive data!

Brave

Create a secret named BRAVE_API_KEY with a Brave Search API Key.

$schema: https://enola.dev/ai/agent
# TODO https://github.com/enola-dev/enola/issues/1628
# model: http://localhost:11434?type=ollama&model=gemma3:1b
model: google://?model=gemini-2.5-flash
# NB: Gemini Flash LITE doesn't cope well with the JSON returned by the Brave News Search Tool; so use Flash.
# TODO prompt: instead instruction:
tools:
  - search_brave

The search-brave tool uses https://search.brave.com (via its API) for Web / Local / Video / Image / News Searches; for example:

enola ai --agents=test/agents/brave.agent.yaml --in="Use the brave_news_search tool to obtain what's new in world politics today and summarize the top 7 developments in bullet points of maximum 3 sentences each."

Git

$schema: https://enola.dev/ai/agent
model: google://?model=gemini-2.5-flash
description: Demo Agent with access to the git CLI tool.
instruction: You are a helpful agent who can use Git.
tools:
  - modelcontextprotocol/git
enola ai --agents=test/agents/git.agent.yaml --in "Write a proposed commit message for the uncommitted files in $PWD"

CAUTION: This server is inherently insecure; you should carefully evaluate if it meets your needs.

This needs uvx to be available; test if launching uvx mcp-server-git works, first.

GitHub

$schema: https://enola.dev/ai/agent
model: google://?model=gemini-2.5-flash
tools:
  - github

Create a secret named GITHUB_PAT GitHub Personal Access Token.

enola ai --agents=test/agents/github.agent.yaml --in "How many stars do the top 3 repos that I own on GitHub repo have? (Use the GitHub context tool to find by GitHub user name.)"

Memory

$schema: https://enola.dev/ai/agent
model: google://?model=gemini-2.5-flash
instruction: >
  Follow these steps for each interaction:

  1. User Identification:
     - You should assume that you are interacting with default_user
     - If you have not identified default_user, proactively try to do so.

  2. Memory Retrieval:
     - Always begin your chat by saying only "Remembering..." and retrieve all relevant information from your knowledge graph
     - Always refer to your knowledge graph as your "memory"

  3. Memory
     - While conversing with the user, be attentive to any new information that falls into these categories:
       a) Basic Identity (age, gender, location, job title, education level, etc.)
       b) Behaviors (interests, habits, etc.)
       c) Preferences (communication style, preferred language, etc.)
       d) Goals (goals, targets, aspirations, etc.)
       e) Relationships (personal and professional relationships up to 3 degrees of separation)

  4. Memory Update:
     - If any new information was gathered during the interaction, update your memory as follows:
       a) Create entities for recurring organizations, people, and significant events
       b) Connect them to the current entities using relations
       c) Store facts about them as observations
tools:
  - modelcontextprotocol/memory

Memory can remember things:

$ enola -vv ai --agents=test/agents/memory.agent.yaml --in "John Smith is a person who speaks fluent Spanish."
I have noted that John Smith is a person who speaks fluent Spanish.

cat ~/memory.json let’s you see the memory ๐Ÿง  cells! ๐Ÿ˜ Now, perhaps another day:

$ enola -v ai --agents=test/agents/memory.agent.yaml --in "Does John Smith speak Italian?"
Remembering...Based on my memory, John Smith speaks fluent Spanish. I do not have any information indicating that he speaks Italian.

This needs npx to be available; test if launching npx @modelcontextprotocol/server-memory works, first.

Everything

The everything MCP server has a number of tools useful for debugging and testing the MCP protocol:

enola ai --agents=test/agents/everything.agent.yaml --in "Print environment variables to debug MCP"

CLI for Debugging

To debug MCP, use the dedicated MCP CLI commands.

Directories