procurement-graph
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@procurement-graphshow me the build order for category strategy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
procurement-graph
A dependency graph of strategic sourcing artifacts and analyses, exposed as an MCP server.
This is an open specification I publish through Canonical Agency. It generalizes patterns from procurement and spend-intelligence engagements at two enterprises under NDA.
What it models
The strategic sourcing process is usually drawn as a linear set of phases. I find that framing brittle. Phases describe when work happens; they do not describe what depends on what. The same spend cube feeds the diagnostic, the category strategy, and the ongoing performance dashboard. The same supplier scorecard depends on baseline metrics captured during onboarding. Treating these as a graph (nodes plus edges) makes it possible to ask the questions that actually matter on an engagement:
What deliverables are blocked by missing inputs?
If raw spend changes, what gets invalidated?
Given my entity-profile data, which analyses can I run today?
What is the build order to produce a category strategy?
Phases (0 through 6) remain in the spec as a navigational frame. They are not the structural spine.
Related MCP server: redraft
Phase model
Seven phases, zero through six, anchoring the program from opening diagnostic through ongoing performance management.
Phase 0 Opportunity Assessment & Business Case
Phase 1 Spend Analysis & Category Segmentation
Phase 2 Supply Market Research
Phase 3 Strategy Development
Phase 4 Sourcing Execution (RFx + Negotiation)
Phase 5 Implementation & Supplier Transition
Phase 6 Performance Management & Benefits TrackingLayer model
Every node lives in one of five layers. Layers describe what kind of work a node is, independent of which phase it belongs to.
Layer 1 Truth and facts (raw data, supplier master, contracts)
Layer 2 Analytical assets (spend cube, should-cost, risk scores)
Layer 3 Decision artifacts (category strategy, negotiation strategy)
Layer 4 Execution artifacts (RFx packages, contracts, transition plans)
Layer 5 Proof and control (benefits tracking, scorecards, compliance)Tools (v0.4)
Navigation and catalog:
Tool | Purpose |
| Seven phases with one-line purpose |
| Full phase spec (purpose, included activities, layer focus) |
| Layer 2 analyses, filterable by feasibility with PO-line data |
| Full analysis spec (firms, inputs, method, outputs, watch-outs) |
| Layer 3-5 deliverables |
| Full deliverable spec (purpose, audience, components, dependencies) |
| Cross-phase artifacts (governance, RAID, benefits tracker) |
| Shared fictional engagement (TechnoFlex PSA resin) that anchors all examples |
| Filled-in artifact examples, each tied to a parent node slug |
| Fetch a filled-in TechnoFlex example for a given parent node slug |
Graph traversal:
Tool | Purpose |
| Direct upstream nodes for a given node |
| Direct downstream nodes for a given node |
| Transitive closure of downstream nodes (impact analysis) |
| Topological sort of every upstream node plus the target |
| Nodes flagged HIGH feasibility against PO-line + entity-profile data |
| Nodes blocked by MISSING inputs, ranked by transitive impact |
Install (local / editable)
cd /Users/fbaig/Projects/procurement-graph
uv sync
uv run procurement-graphValidate the content corpus
procurement-graph validate runs the integrity checks the test suite enforces (edge consistency, acyclicity, example linkage, phase continuity) as a standalone CLI. Useful for content editors to verify their work before committing.
uv run procurement-graph validateClaude Desktop config
{
"mcpServers": {
"procurement-graph": {
"command": "uv",
"args": [
"--directory",
"/Users/fbaig/Projects/procurement-graph",
"run",
"procurement-graph"
]
}
}
}Repository layout
content/
├── phases/ seven phase descriptions
├── analyses/ Layer 2 analyses from the procurement analytics catalog
├── deliverables/ Layer 3-5 deliverables from the phase-by-phase taxonomy
├── horizontal/ cross-phase artifacts (governance, RAID, benefits tracker)
├── engagement/ shared fictional engagement (TechnoFlex PSA resin)
└── examples/ 15 filled-in artifact examples anchored to the TechnoFlex engagement
src/procurement_graph/
├── __main__.py entrypoint dispatching to MCP server or validate CLI
├── server.py FastMCP app and tool registrations (16 tools)
├── loaders.py cached file readers
├── parsing.py YAML frontmatter and markdown body parsing
├── models.py pydantic node, phase, and example models
├── graph.py dependency-graph traversal (BFS, topo sort, feasibility)
└── validate.py standalone content-integrity checksThe methodology content lives in content/ as markdown with YAML frontmatter, so the source of truth is editable without touching the server code.
License
Apache-2.0.
Available Tools
16 toolsbuild_orderA
Topological sort of every upstream node plus the target. Answers 'in what order should I build the inputs to produce this artifact?'.
Useful for engagement planning: given a target deliverable (e.g., category-strategy), return the dependency chain so the team builds prerequisites before dependents.
| Name | Required | Description | Default |
|---|---|---|---|
| target_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It explains the algorithm and use case, implying read-only analysis. Could mention return format but output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines action, second gives context. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers what it does and when to use. With one parameter and output schema, description is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%, but description explains target_slug via example (category-strategy), adding meaning beyond schema name. Single parameter adequately described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it performs topological sort on upstream nodes plus target to determine build order. Distinguishes from siblings like get_dependencies by focusing on ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says useful for engagement planning with an example (category-strategy). Does not mention when not to use, but context indicates it's for build ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_gap_analysisA
Group nodes by the missing input that blocks them, ranked by impact.
Each entry names the missing data source (e.g., 'Contract metadata') and lists the nodes it directly blocks plus the transitive downstream impact. Used to prioritize data acquisition: investing in the input at the top of the list unlocks the largest share of the graph.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the output as a ranked list of missing inputs with impacts, implying a read-only analysis. However, it does not disclose any potential side effects, permissions, or limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the core function, the second provides detail and use case. No wasted words, well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with an output schema, the description fully covers purpose, output format, and usage context. No additional information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds value by explaining the output structure and ranking logic, which compensates for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool groups nodes by missing input, ranks them by impact, and lists data sources with direct and transitive downstream effects. It distinguishes itself from siblings like 'what_breaks_if' by focusing on prioritization for data acquisition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Used to prioritize data acquisition,' providing clear context for when to use. It lacks explicit when-not-to-use or alternatives, but the purpose is well-defined among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feasible_nowA
Nodes whose declared inputs are all HAVE for a PO-line + entity-profile data set. Answers 'what analyses can I run today without acquiring new data?'.
The differentiated filter behind this whole spec. Most procurement libraries can list the analyses; this one tells you which ones are runnable against your data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only explains core functionality (input availability check). It does not disclose whether this is a read-only operation, potential side effects, performance implications, or any prerequisites beyond having a dataset. This leaves the agent guessing about safety and statefulness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is remarkably concise: three sentences that assert purpose, provide a value-focused question, and differentiate from alternatives. Every sentence adds unique value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains what the tool does but omits details about the output structure (despite an existing output schema) and uses domain jargon ('nodes', 'PO-line', 'entity-profile') without clarification. For a tool with no parameters and a rich sibling set, some additional context on output format would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description cannot add information beyond the schema. Per guidelines, a baseline of 4 is appropriate when no parameters exist, as the description is not penalized for lacking parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies analyses that can be run immediately because all required inputs are available. It directly answers the question 'what analyses can I run today without acquiring new data?' and distinguishes itself from sibling tools like list_analyses by emphasizing feasibility filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contrasts this tool with typical analysis listing tools, implying it should be used when the goal is to find runnable analyses. However, it does not explicitly state when not to use it or provide alternative tools for different scenarios, missing some nuance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analysisB
Full spec for a single analysis: source firms, inputs and their feasibility, method, primary outputs, decision enabled, watch-outs, and graph dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral aspects. It describes the returned content but does not disclose side effects, authentication needs, rate limits, or explicitly state it is read-only. The tool name suggests reading, but not guaranteed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence listing many aspects, efficient but run‑on. Could be structured for better readability, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has output schema, so description need not repeat return values. However, given the complexity and no parameter semantics, the description is adequate but not fully complete—missing error conditions or prerequisite info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain the 'slug' parameter at all. The parameter's purpose, format, or source is not mentioned, leaving the agent without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'get' and resource 'analysis', and enumerates the content (source firms, inputs, feasibility, method, outputs, etc.), clearly distinguishing from sibling tools like 'list_analyses' which returns a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives mentioned. It implies use when needing full details of a single analysis, but does not differentiate from tools like 'get_dependencies' or 'get_phase' that return subsets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artifact_exampleA
Fetch a filled-in example for a given parent node slug.
Returns the example artifact (as it would land on a stakeholder's desk), populated with concrete numbers, supplier names, and findings from the shared engagement. Useful as a few-shot reference for what a strong version of the artifact looks like in practice.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for disclosure. It indicates the tool is a read operation (fetches an example) and describes the content of the output. However, it does not discuss potential side effects, permissions, or rate limits. The description adds some behavioral context but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and resource. Every sentence provides essential information without redundancy. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present), the description adequately explains the output (a filled example with concrete data). It covers the main use case. However, it could mention that the tool returns a single example, not a list, and provide a bit more detail on how the slug relates to other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning for the single parameter 'slug'. It describes it as 'given a parent node slug', which provides context but does not explain what a 'slug' is or how to obtain it. For a single required parameter, the description adds moderate value but not full clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('filled-in example for a given parent node slug'). It specifies what the example contains (concrete numbers, supplier names, findings) and its use as a reference. Differentiates from sibling 'list_artifact_examples' by focusing on a single specific example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests the tool is 'useful as a few-shot reference', indicating when to use it. However, it does not explicitly state when not to use it or mention alternatives like 'list_artifact_examples' for browsing. The context is clear but lacking exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deliverableB
Full spec for a single deliverable: purpose, audience, inputs, components, output format, quality markers, and graph dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only lists what the tool returns without disclosing behavioral aspects such as idempotency, read-only nature, or error handling. Relies on output schema but does not explain behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single sentence that clearly front-loads the purpose ('Full spec for a single deliverable') and lists contents concisely, though separating into two sentences could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description tells what the tool returns but lacks context about the required slug parameter and does not differentiate usage from siblings. Output schema exists, but parameter info is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'slug' has no description in schema or tool description. The description does not clarify its meaning beyond what the name implies, providing no added value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves the full specification for a single deliverable, listing specific components (purpose, audience, inputs, etc.), which distinguishes it from sibling tools like list_deliverables or get_dependencies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for obtaining comprehensive details about one deliverable, but does not explicitly state when to use this vs. alternatives like list_deliverables for overviews or get_dependencies for graph dependencies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dependenciesA
Direct upstream nodes for a given node. Answers 'what does this need?'.
Returns the immediate predecessors only. For full upstream closure, use build_order(slug), which returns every transitive ancestor in dependency order.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses that the tool returns immediate predecessors and implies it is a read-only operation. However, it does not explicitly state it does not modify data or require permissions, but for a simple query tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise—two sentences. The first sentence states the purpose, and the second provides guidance on alternatives. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the main functionality and provides an alternative, it lacks definition of the 'slug' parameter. Given the existence of an output schema, return values are not required, but the parameter gap reduces completeness for a tool with a single parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'slug' with no description, and the tool description does not explain what 'slug' represents (e.g., the node identifier). With 0% schema coverage, the description should compensate but fails to define the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Direct upstream nodes' for a given node, answering 'what does this need?'. It distinguishes itself from the sibling tool 'build_order' by noting it returns only immediate predecessors, preventing confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for immediate predecessors) and provides an alternative (build_order for full closure). This helps the agent choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dependentsA
Direct downstream nodes for a given node. Answers 'what uses this?'.
Returns the immediate successors only. For full downstream impact, use what_breaks_if(slug), which returns every transitively-affected node.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it returns only immediate successors, not transitive. Does not cover authentication, rate limits, or other behavioral traits, but key scope is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences: first states purpose, second clarifies scope, third provides alternative. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return value explanation is not needed. Given one parameter and simple purpose, description covers essentials. Could mention that slug is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%, but description does not explain what 'slug' is. It mentions slug only in the alternative tool reference, leaving ambiguity about the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns 'Direct downstream nodes for a given node' and answers 'what uses this?'. Distinguishes from sibling what_breaks_if by specifying immediate successors vs transitive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use alternative: 'For full downstream impact, use what_breaks_if(slug)'. Implies this tool is for immediate dependents only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_engagement_contextA
The shared fictional engagement narrative that anchors every example. Read this first to see how examples thread together coherently.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It describes the tool as providing a narrative for examples, implying it's a read-only, non-destructive operation. This is transparent given the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no redundant information. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and no parameters, the description adequately explains its role as the grounding narrative for examples. No further detail needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the description doesn't need to add param info. Per guidelines, baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool retrieves a shared fictional engagement narrative that provides context for other examples. It differentiates itself from sibling tools (e.g., get_analysis, build_order) by being the foundational context-reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Read this first', giving clear usage guidance. While it doesn't specify when not to use it or alternatives, the tool's simplicity (no parameters) makes this sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_phaseA
Full spec for a single phase: purpose, included activities, source firms, and the layer focus of work performed in this phase.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the content of the output (purpose, activities, etc.) but does not disclose error behavior, performance, or other operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence covering the main elements, but it could be more front-loaded by explicitly naming the parameter. Efficient but slightly vague.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the return values are documented. However, the description lacks explicit parameter guidance and behavioral details. Adequate for a simple get tool but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single integer parameter 'number' with 0% schema description coverage. The description does not explain that 'number' refers to the phase identifier. The meaning is only implicitly linked through context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a 'full spec for a single phase' listing specific aspects like purpose, activities, source firms, and layer focus. This distinguishes it from 'list_phases' and other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for a specific phase, but does not explicitly state when to use this over alternatives like 'list_phases' for browsing phases or 'get_deliverable' for phase-related items. No when-not or exclusive context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_analysesA
List analyses from the procurement analytics catalog (Layer 2 nodes).
Filter by primary_phase (0-6), layer (1-5), or feasibility with PO-line data ('HIGH', 'MEDIUM', 'LOW'). Feasibility is the most useful filter: it tells you which analyses can be run today with PO-line + entity-profile data alone.
| Name | Required | Description | Default |
|---|---|---|---|
| primary_phase | No | ||
| layer | No | ||
| feasibility | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose whether the tool is read-only, safe to call repeatedly, or any side effects. Key behavioral traits like pagination or data freshness are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The second sentence provides high-value guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values are covered. The description covers filtering and core purpose. Minor omissions like pagination support are not critical for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates, explaining ranges for primary_phase (0-6), layer (1-5), and feasibility values with practical context. This adds significant meaning beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists analyses from the procurement analytics catalog (Layer 2 nodes). It identifies the resource and action, but does not explicitly differentiate from sibling tools like 'feasible_now' or 'list_deliverables'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises that feasibility is the most useful filter, providing implicit guidance on when to apply it. However, it does not explicitly state when to use this tool versus alternatives or specify exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artifact_examplesA
List filled-in artifact examples anchored to the shared engagement context.
Each example's slug matches a parent node slug, so a category-strategy example
is at content/examples/category-strategy.md and threads with the spend-cube,
rfx-package, and other examples through the TechnoFlex PSA resin narrative.
Use get_engagement_context() for the shared engagement first, then
get_artifact_example(slug) to fetch a specific filled-in artifact.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description adds behavioral context: slug matching parent node, path structure example. But lacks disclosure of side effects, idempotency, or access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-loading purpose, adding necessary detail on slug matching, and providing usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so no need to detail returns. Description covers what the list contains and how to use with other tools. Minor gap on ordering/filtering but adequate for zero-parameter list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema. Baseline 4 applies. Description adds value by explaining output structure (slug matching) and usage context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'List', resource 'filled-in artifact examples', and context 'anchored to the shared engagement context'. Distinguishes from sibling get_artifact_example by listing vs fetching specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage sequence: first get context via get_engagement_context(), then list, then optionally fetch specific via get_artifact_example. Clear when to use it, though does not state when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deliverablesC
List deliverables from the phase-by-phase taxonomy (Layer 3-5 nodes).
Deliverables are the formatted artifacts handed to stakeholders: strategy docs, RFx packages, contracts, scorecards. Each names which upstream analyses and deliverables it depends on.
| Name | Required | Description | Default |
|---|---|---|---|
| primary_phase | No | ||
| layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states the basic purpose and defines deliverables; it fails to mention important traits like read-only nature, pagination, authentication requirements, or whether results are filtered by default. This is insufficient for an agent to fully understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence states the core purpose, and the second adds valuable context about deliverables. It is front-loaded and efficient, though a more structured format (e.g., listing constraints or parameters) could improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low parameter count and existence of an output schema, the description provides a minimal but acceptable overview. However, it lacks usage guidelines and parameter semantics, which are necessary for confident use. The description is adequate for an agent familiar with the domain but incomplete for a new agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation or examples for the two parameters (primary_phase and layer). The agent cannot infer what these parameters control or their formats, making the tool difficult to invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists deliverables from a phase-by-phase taxonomy (Layer 3-5 nodes) and defines deliverables as formatted artifacts. This is specific and informative, but it does not differentiate from sibling tools like list_analyses or get_deliverable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description omits any conditions, prerequisites, or hints about when to prefer list_deliverables over related tools such as get_deliverable or list_analyses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_horizontal_artifactsA
List horizontal artifacts that span multiple phases: governance model, RAID log, benefits tracker, knowledge repository.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description adds context that these artifacts 'span multiple phases', indicating the scope. No side effects or restrictions are disclosed, but the tool is a simple list with no parameters and likely has output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loads the purpose, and includes just enough detail without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema (presumably), the description fully explains the tool's function and distinguishes it from siblings. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so baseline is 4. The description does not need to add parameter details, and it provides examples of returned artifacts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'horizontal artifacts', specifies they span multiple phases, and provides concrete examples (governance model, RAID log, etc.), distinguishing it from siblings like list_phases or list_deliverables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing cross-phase artifacts and gives examples, but does not explicitly state when to use or not use this tool versus alternatives, nor provide any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_phasesA
List the seven phases of the strategic sourcing process (Phase 0 through 6).
Phases are a navigational frame, not the structural spine. The spine is the dependency graph of nodes (analyses, deliverables, horizontal artifacts).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains that phases are a navigational frame, not the structural spine, which adds context about the tool's conceptual role. However, it does not disclose if there are any side effects, read-only nature, or other behavioral traits beyond the listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence immediately states the tool's purpose. The second sentence provides additional conceptual context. Every sentence is valuable, and there is no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and an output schema exists (though not provided), the description adequately specifies the number of phases (seven) and their range. The conceptual note adds context that helps an agent understand the output's nature. The description is complete for this simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema description coverage is 100%. The description adds no parameter information but provides useful context about the phases' role, which adds value beyond the empty schema. Baseline for zero params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the seven phases of the strategic sourcing process, specifying the range Phase 0 through 6. This is a specific verb and resource, and it differentiates from sibling 'get_phase' which likely retrieves a single phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus alternatives. It implies listing all phases, but no when-not or alternative comparison is provided. Sibling tools like 'get_phase' exist, but no guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_breaks_ifB
Transitive closure of downstream nodes. Every node that would become stale if this one changed materially (new data, redefined taxonomy, restated baseline).
Useful for impact analysis: 'if I restate the spend cube, what reviews do I need to redo?'
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'transitive closure' and the concept of staleness, but does not disclose details such as whether the operation is read-only, error handling for missing or invalid slugs, or performance considerations. The behavioral description is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences and a usage example. Every word adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (transitive closure) and the presence of an output schema (which makes return value documentation unnecessary), the description is moderately complete. However, it lacks details about the input parameter and does not differentiate from similar sibling tools, leaving gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single parameter 'slug', and the description does not mention 'slug' at all. It provides no context on what the parameter represents or how it should be used, failing to add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly explains the tool's purpose as 'transitive closure of downstream nodes' and illustrates with a concrete example. It is specific about what it does, but could more explicitly state that it returns a list of affected nodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example use case ('if I restate the spend cube, what reviews do I need to redo?') that implies impact analysis, but it does not explicitly specify when to use this tool versus alternatives like 'get_dependencies' or 'get_dependents'. Usage context is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v0.4.0- First observed
build_order - First observed
data_gap_analysis - First observed
feasible_now - First observed
get_analysis - First observed
get_artifact_example - First observed
get_deliverable - First observed
get_dependencies - First observed
get_dependents - First observed
get_engagement_context - First observed
get_phase - First observed
list_analyses - First observed
list_artifact_examples - First observed
list_deliverables - First observed
list_horizontal_artifacts - First observed
list_phases - First observed
what_breaks_if
TDQS
Each tool targets a distinct concept or action: ordering, feasibility, analysis details, artifact examples, deliverables, dependencies, etc. The descriptions clearly differentiate them, and there is no overlap in purpose.
All tool names follow a consistent snake_case verb_noun pattern (e.g., build_order, list_analyses, get_dependencies). The exceptions like feasible_now and data_gap_analysis still align with adjective_noun, maintaining overall consistency.
The 16 tools cover the full range of operations expected for a procurement knowledge graph: listing, getting details, dependency analysis, feasibility checks, and phase browsing. Neither too few nor too many for the domain.
The tool surface provides comprehensive coverage for a read-only catalog: listing all node types, fetching full specs, exploring dependencies both upstream and downstream, ordering builds, and assessing feasibility. No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP access to the U.S. federal procurement graph: contracts, opportunities, entities, and more.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Read-only MCP server for wafergraph.com's semiconductor & AI supply-chain data: 30 tools, no auth.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Related MCP Servers
- AlicenseAqualityAmaintenanceExposes a materialized service dependency graph as an MCP toolset for persistent, queryable root-cause analysis via Cypher queries.51Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server for AI-assisted project development and tracking. It exposes a typed graph of design nodes (concepts, decisions, requirements, etc.) and edges to Claude Code, enabling structured management of project knowledge and report generation.3Apache 2.0
- AlicenseBqualityAmaintenanceA lean, local knowledge graph that joins a repo's code to its aSPARK delivery artifacts, enabling agents to trace user stories to code and assess impact of changes, served over MCP.93MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying cross-repo code dependencies, HTTP routes, database tables, and queues via an MCP server using Cypher queries.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mfbaig35r/procurement-graph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server