Skip to content

Philosophy

Informative.

Informative. This chapter describes the worldview behind FlowMCP — why a schema exists, what a graded tool is worth, and how an agent is meant to find and call it. It is written in prose; the normative rules that operationalize these convictions live in the chapters it points to.

FlowMCP rests on a small set of convictions about how an autonomous agent and an unfamiliar API should meet: that a schema is a contract rather than a cage, that a tool is graded before it is trusted, that nothing fails silently, and that everything in the configured folders is discoverable without a hidden ceremony. None of these convictions is decorative — each one exists to prevent a concrete failure mode, and each later chapter turns the conviction into a rule. This chapter records the worldview so that it stays explicit as the specification grows.

A schema is a guardrail, not a cage. FlowMCP does not try to drive the agent’s car for it; it lines the highway so that the car can move fast on a road it has never seen. The whole point of the project is to let an agent drive an unfamiliar API at speed — without reading the provider’s documentation, without guessing the authentication flow, without learning the parameter names by trial and error — and still not go off the cliff.

A guardrail is a constraint that is cheap to set up and expensive to omit. The schema names the parameters, fixes their types, encodes the route, and labels the credentials a call needs. Inside that frame the agent is free; outside it, it drifts into invented endpoints, malformed requests, and silent wrong answers. The schema is never there to slow the agent down. It is there so that going fast is the same thing as staying on the road.

Push the analogy one step further and the schema becomes a standardized socket. The agent plugs in without knowing the wiring behind the wall. It does not need to know whether the data comes from REST or GraphQL, whether the provider paginates by cursor or by offset, whether the timestamps are Unix seconds or ISO strings — the socket presents one shape, and the agent calls it the same way it calls every other tool in the catalog.

This is why interoperability is the foreground concern, not an afterthought. A socket is only worth standardizing if a great many things can plug into it. FlowMCP’s value grows with the number of other tools, agents, and MCP clients it can connect — through the CLI and through the MCP/A2A server alike (see 19-mcp-integration.md). A schema that only one caller can use is a custom wire; a schema that any conformant agent can call is a socket. The specification optimizes for the socket.

A schema that parses is not yet a tool worth trusting. Before a tool earns a place in the trusted catalog it is graded — first by a deterministic data pretest, then by non-deterministic scoring. The deterministic pretest is blunt and unforgiving on purpose: it actually calls the live endpoint and checks two things together, that the response is HTTP 200 and that the data is non-empty.

The second clause matters because a tool can answer HTTP 200 and still hand back nothing — an empty array, a null payload, a polite shell with no content. A pretest that checked only the status code would wave such a tool through as healthy, and an agent would then build on a contract that returns air. Treating “200 but empty” as a failure, caught at grading time, means a tool in the trusted catalog is one that has been observed to return real data, not merely a successful status line. The grading workflow and its scoring areas are described in 09-validation-rules.md.

FlowMCP never invents a value to paper over one that is missing. When a required parameter is absent, a credential is unset, or a configuration field is ambiguous, the system fails loudly rather than quietly substituting a plausible default and continuing. A silent default is a guess wearing the costume of a fact, and a guess that nobody was told about is the hardest kind of failure to find.

The rule is strictest where it is most dangerous. Anything that would write or assume on the user’s behalf — a credential, an environment file, a configuration value — checks first and announces what it is about to do; it never overwrites an existing value or invents a missing one in silence. Overwriting a real credential with a default, for instance, is the kind of quiet action that destroys data while reporting success. Loud failure is recoverable; silent success on wrong data is not. The boundaries that enforce this around credentials and configuration are set out in 05-security.md.

There is no hidden activation step. Every tool in the configured schema folders is immediately discoverable through search and list, and immediately callable through call. An agent does not register a tool, enable it, install it into a session, or perform any ceremony between finding a tool and using it — it searches the catalog, reads the required parameters and example from the search result, and calls. The interaction model is exactly two moves:

StepMoveWhat it returns
Discoversearch / listThe matching tools, with their required parameters and a callable example
InvokecallThe live result of the tool, called directly

The simplification is deliberate: there is no intermediate state in which a tool is found but not yet callable. A gap between discovery and use — a tool that is visible but needs a separate activation step before it can run — is a confusing state for a person and an outright trap for an autonomous agent. The catalog an agent can see is exactly the catalog it can use.

The “search, then call” promise raises an obvious question: what about a tool whose credentials are missing? FlowMCP answers it by degrading gracefully. A tool that needs a key the environment does not have is not hidden and is not broken — it appears in the catalog clearly labeled, as [disabled: missing KEY], naming the exact credential it is waiting for.

This matters because the two failure modes it avoids are both worse. A hidden tool leaves the agent unable to discover a capability that exists; a tool that looks callable but throws an opaque error at call time leaves the agent debugging the framework instead of its task. A disabled-but-visible tool tells the truth: the capability exists, here is precisely what it needs to come online, and nothing about it is mysterious. Key-gating is honesty about credentials, not concealment of capability.

At scale, you read the index; you do not rebuild the world. FlowMCP can hold a large catalog of schemas, and the cost of treating that catalog naively grows with its size. A namespace index already records, ahead of time, which schema owns which tool. The correct move when resolving a single tool is to consult that index and load the one schema it points to.

The principle is simple: precomputed structure exists to be read, not re-derived on every request. Resolving one tool by loading the entire catalog produces the right answer at the wrong cost — and an operation whose cost scales with the size of the whole catalog when it should scale with a single entry is a defect, however correct its output happens to be. Reading the index keeps a single-tool call cheap no matter how large the catalog grows.

These convictions are easy to hold while a project is small and easy to lose while it grows. A guardrail that nobody can name becomes bureaucracy; a rule whose purpose has been forgotten becomes a rule people quietly route around. This chapter exists so that does not happen — it is the place where FlowMCP’s guiding ideas are written down, each one paired with the failure mode it prevents, so the worldview stays explicit even as the normative chapters multiply. When a new rule is proposed, it can be measured against the philosophy recorded here. The specification’s letter lives in the chapters this page points to. Its spirit lives here.