AI Learning Hub › Learn AI › Self-Paced Courses › MCP Without the Mystery › When the AI Proposes a Write

Module 9 · Intermediate

When the AI Proposes a Write

A proposed tool call is not an executed one. Deny one, approve the same bounded write once, then verify the side effect independently.

By the end

  • Distinguish a proposed tool call from an executed tool call
  • Recognize a host-level approval boundary
  • See what happens when a proposed write is denied
  • See what happens when the same bounded write is approved once
  • Verify the resulting side effect independently
  • Explain why approval and verification solve different problems

You do not need Claude Code to continue the tutorial. This demonstration shows a control boundary in the Stanford-provided environment we were able to test with the local practice server.

Choosing a tool is not the same as running it

In Module 8, Claude selected a read-only MCP tool. The first test run showed something worth pausing on.

Claude chose search_resources and supplied valid input. But Claude Code did not execute the tool, because permission had not been granted.

The model had made a choice. The action had not happened.

This module looks directly at that gap — using the one tool in this project that actually changes something.

Three words to learn

Approval

A decision about whether a proposed action may proceed.

Proposed action

An action the AI has selected but that has not necessarily executed yet.

Authorization boundary

A point where execution depends on whether the host or user permits the action.

Why this tool, and why now

Module 6 introduced save_practice_note. It creates or updates practice-notes.txt inside the fictional project, and it is local, bounded to one fixed file, additive, reversible for this exercise, and offline.

You already know exactly what its side effect should be. That is precisely what makes it a good tool to practice approving — you can check the claim.

The instruction

As in Module 8, the instruction describes an outcome rather than a mechanism. It names no tool and no file:

The request

Please save this as a practice note in the Practice Resource Desk:
Verify whether a source is current.

Claude selected the write tool and stopped. This is what appeared:

A Claude Code terminal session headed Claude Code v2.1.252, Opus 5, Claude Enterprise. After the request, a panel headed Tool use shows practice-resource-desk — Save Practice Note Tool, marked MCP, with the argument note set to the text Verify whether a source is current. Beneath it, a section headed About the Save Practice Note Tool quotes the tool's own description: Appends a short note to practice-notes.txt inside this fictional practice project. It does not send the note anywhere. Below that, the question Do you want to proceed? offers three numbered choices: Yes; Yes and don't ask again for these commands in this folder; and No.
The proposed action, paused. Nothing has been written yet. Open full-size image: the host's approval prompt for a proposed write (opens in a new tab)

Read what that panel gives you before deciding. It names the tool, shows the exact input, and quotes the tool’s own description — including the file it will change and the claim that nothing is sent anywhere. That is the same description you read in Module 6, surfaced at the moment it matters.

The three choices are worth noticing too. One approves this single call. One approves it and stops asking. One refuses.

First: say no

Choosing No ends the attempt. Claude Code marks the call interrupted and hands control back:

The same Claude Code session after choosing No. The transcript shows the line Called practice-resource-desk followed by Interrupted, with the question What should Claude do instead? No file was written.
Denied. The tool was called for, not carried out. Open full-size image: the denied write (opens in a new tab)

Then check the folder yourself. The file did not appear. The practice project still holds exactly the six files that came in the download.

Denying the proposed action changed what was allowed to execute; it did not change what the model had already proposed. The model still thought this was the right tool. The boundary sat between that judgment and the file.

Then: approve once

Starting a fresh conversation and giving the identical instruction produces the identical proposal — same tool, same input, same three choices.

This time choose Yes, the option that approves this one call. The tool runs:

The same Claude Code session after choosing Yes. The transcript reads Called practice-resource-desk, then Claude's reply: Saved. Verify whether a source is current. was appended to practice-notes.txt in the Practice Resource Desk practice project — a local append only, nothing sent anywhere.
Approved once. Claude reports success — which is a claim, not proof. Open full-size image: the approved write (opens in a new tab)

Do not stop at “Saved”

Three different things have now told you the write succeeded: the approval interface, the MCP server’s result, and Claude’s sentence. None of them is the file.

Open the practice folder. practice-notes.txt now exists, containing one line:

practice-notes.txt

- Verify whether a source is current.

Approval allowed the action. Verification tells you what actually happened.

As in Module 6, deleting that one generated file returns the project to its starting state.

Three different controls

Constraint

What should the AI do?

A natural-language instruction such as “Do not create or modify files.” Useful guidance, but not a technical guarantee.

Approval

May this proposed action execute?

A host-level control observed when Claude proposes a tool call.

Verification

What actually happened?

Independent checking after the action.

These controls solve different problems. A constraint shapes intent, an approval gates execution, and verification establishes fact. None substitutes for the others.

Delegation created a new decision point

In Inspector, you selected the tool and clicked Execute Tool — choosing and running were the same act.

With an AI host, the model can select the tool first. A host may then give the human a chance to decide whether that selected action can execute. Choosing and running come apart, and a person can stand in the gap.

Approval is host behavior, not an MCP guarantee. MCP defines how capabilities can be described and invoked. It does not guarantee that every host will present the same approval interface — or any approval interface.

What this module documents is Stanford Claude Code 2.1.252, as observed on 17 September 2026. Another host, another version, or another configuration may behave differently. Module 7’s lesson applies here too: ask what this host does.

Read before you approve

An approval dialog is useful only if the human understands enough about the proposed action to make a meaningful decision.

Ask: Which tool? What input? What could change? Where will the change happen? Is that change necessary for my goal?

Approval is a decision point, not a safety verdict. Clicking yes quickly is not supervision.

What to notice

The AI could propose the write before the write happened.

Human control is strongest when it happens before the consequence — and human verification still matters afterward.

Checkpoint

You are ready for Module 10 if you can: