Skills, MCP tools and rules: three ways to give an agent capabilities
Agents get abilities in different ways. A rule constrains what they do, a skill tells them how to do a job, and an MCP tool lets them call a function. Each has its own risk, so declare all three in a register and test that nothing exists unlisted.
π― For A developer or lead who extends what agents can do
- How rules, skills and tools differ and what each can break
- How to declare each in a register with an authority and a risk class
- What our own counts look like
π§° Three kinds of capability
A rule is an instruction that always applies: "never stage everything", "numbers need an artifact". It limits behaviour and does nothing by itself. It should reach every executor, including cheap ones and scripts.
A skill is a packaged way of doing a job: a folder with instructions the agent loads when the task matches. A skill may tell the agent to run commands or change files. It can carry authority, such as being our own required method, or only advise.
A tool is a function the agent calls through a protocol such as MCP. It has a name, parameters and a return value. A tool does things: read a database, search documents, write a record.
The distinctions matter because each fails differently. A bad rule is ignored, a bad skill misleads, and a bad tool acts.
π One register for all three
We declare our skills in one registry file. Each entry has a domain, an authority (our own canon or outside advice), a risk class, the lowest executor level that may use it, whether it needs a person, and whether it acts or only states a rule. A test fails when a skill folder exists without an entry, or an entry without a folder.
On 3 November 2026, 21:53 UTC the registry held 32 entries: 14 canon and 18 advisory; 24 that act and 8 that only state rules.
Our MCP server is a separate surface with its own control. On the same day its code defined 21 tool functions. The one that writes to the knowledge base runs only when a deliberate setting is on, and each call is recorded in an audit database with its status and duration.
π How they fit together
A rule can tell an agent to use a skill. A skill can tell an agent to call a tool. A tool can return text that tries to give the agent a new rule. Treat that last path as hostile, as we do with any outside text.
The register is where the chain becomes visible. If a skill calls a tool that writes to a remote system, the skill's risk class must say so, and it must require a person.
π οΈ Practice: inventory your capabilities
- List your rules: files that are loaded into every session.
- List your skills: folders of instructions. Give each a domain, an authority and a risk class.
- List your tools: every function your agents can call. Mark which read, which write and which reach outside.
- Put the three lists in one register, with a column for kind.
- Write a test that compares the register with what exists on disk or in the server, in both directions.
- For every entry that acts on a remote system, set "needs a person" and a minimum executor level.
- Add an audit record to every tool call: name, arguments, result status, duration.
β Check yourself
- Add a new skill folder without an entry. The test fails and names it.
- Add a tool to the server without listing it. A reviewer or a test notices.
- Pick any entry and say what the worst case is, who approves, and which executor may run it.
- Find the audit record for a tool call made yesterday.
π§ When this does NOT work
- Entries that are out of date. A register nobody updates describes a system that no longer exists. Tie the test to the build.
- Counting tools by code. A tool defined dynamically will not be found by a text count. Use the server's own list.
- Rules that are never read. A rule in a file the agent never loads has no effect. Test that it is in the start context.
- Outside skills. Third-party skills can ask for powerful actions. Mark them advisory and never mandatory.
- Risk classes that are too coarse. Four classes are a start. Add detail where decisions turn on it.
π Evidence
| What we measured | Registry entries by authority and by acting versus rule, and tool functions in our MCP server code |
| When | 3 November 2026, 21:53 UTC |
| Artifact | Our skills registry and its test, and the MCP server module, in our private repository |
| Limit | The count of tool functions is a text count of decorated functions. It was higher than the number we had in our older notes, which shows how quickly such figures go stale |
β‘οΈ Next
Write down who may use what in An AI usage policy and register a small team can enforce, and see how MCP works in What is MCP?.
Sources
- An AI usage policy and register a small team can enforce: the register.
- What is MCP? Servers, clients and safe connections: MCP basics.
- AGENTS.md and rules files: rules.
- MCP server security checklist: checks.
π Article connections
Open the full knowledge graph βPublished article links. Select a node to open its article at the heading.
Article links Β· keyboard / text view
Same topic
- A vector base is a map, not a source: what we learned from retrieval
- When you cannot tell what a model call cost: freeze, then reconcile
- Splitting a big task for a cheap model: the 24,000-byte lesson
- Eight shell and git mistakes our agents made, and the rule for each
- Several agents, one repository: ownership rules from real incidents
- Keep provider keys out of the agent: one gateway, one token per task
Next steps
Related reading
A vector base is a map, not a source: what we learned from retrieval
A vector base finds passages that are close in meaning to your question. It does not know which are true or current. Treat every hit as a pointer: open the file it names, check the hash, and take numbers from the artifact, never from the retrieved paragraph.
AI agents and MCP explainedWhen you cannot tell what a model call cost: freeze, then reconcile
Sometimes a model call times out and you do not know whether the provider charged you. Never record that as zero. Mark it uncertain, stop new paid calls, and let a named person reconcile it with the provider's statement. Refusals before generation are the exception.
AI agents and MCP explainedSplitting a big task for a cheap model: the 24,000-byte lesson
A cheap model does well on one small, well-defined job and badly on a big pile. We cap a task at 24,000 bytes and refuse larger ones before any model is called. Split by unit, one file or one country per task, and check the size before you start.
AI agents and MCP explainedEight shell and git mistakes our agents made, and the rule for each
Agents write shell commands fast and confidently, and some of the failures repeat. Here are eight real mistakes from October 2026, what each one broke, and the one-line rule we wrote after it. Copy the rules into your own agent instructions.
π¬ Comments