Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Appendix L: Decision Trees

Should This Be an MCP Server?

Does natural language improve the workflow?
├── No  -> Stop: a CLI, script or UI (ch03)
└── Yes
    └── Does a shared protocol create reuse or control?
        ├── No  -> Stop: function calling or a skill (App D)
        └── Yes
            └── Will you own the operating cost and risk?
                ├── No  -> Stop and simplify
                └── Yes -> Build the MCP server

→ ch03 §The Decision Rule

Local or Remote?

Shared across users or machines?
├── No  -> Local STDIO; revisit at the second user
└── Yes
    └── Need central auth, policy or rollout?
        ├── Yes -> Remote server over Streamable HTTP
        └── No  -> Local STDIO

→ ch07

Tool, Resource, or Prompt?

Does it cause a side effect?
├── Yes -> Tool
└── No
    └── Readable context with a stable URI?
        ├── Yes -> Resource (plus a read tool if the model fetches it)
        └── No  -> Prompt or workflow template

→ ch06

Which Auth Pattern?

Acting for a signed-in user?
├── Yes -> Authorization Code + PKCE
└── No
    └── Confidential service?
        ├── Yes -> Client Credentials
        └── No  -> Rethink trust; API keys only for narrow first-party use

→ ch18

Which Client Registration?

Pre-registered credentials for this issuer?
├── Yes -> Use them
└── No
    └── AS advertises client_id_metadata_document_supported?
        ├── Yes -> CIMD
        └── No
            └── AS advertises registration_endpoint?
                ├── Yes -> DCR (deprecated) + application_type
                └── No  -> Ask the user

→ ch19, App B

Does This Tool Need Approval?

readOnlyHint: true, backed by a read-only credential?
├── Yes -> None, unless openWorldHint after untrusted input
└── No
    └── destructiveHint: true?
        ├── Yes -> Approval showing exactly what is lost
        └── No
            └── idempotentHint: true, caller's own data only?
                ├── Yes -> Host-level approval
                └── No  -> Approval, or split the tool

→ ch06, ch20

How Should I Test It?

What changed?
├── Business logic    -> Unit tests
├── Tool schema       -> Contract tests
├── Dependency        -> Integration tests
├── Client behavior   -> Client-in-the-loop test
└── Model routing     -> Real-model evaluation

→ ch12