.well-known discovery, scoped self-serve credentials, OAuth client-credentials, idempotency keys, deterministic generation, HITL checkpoints, audit events, and .docx / .xlsx / ZIP exports.AGENTS.md — shortest path for agents to discover, authenticate, and use the API without reading the full repo.docs/agents/quickstart.md.docs/agents/mcp.md.docs/agents/trust-report.md.docs/.streamable-http MCP transport via pip install "grantflow[mcp]". Python 3.11–3.13 supported..well-known discovery routes (agent-capabilities.json, agent.json, agent-policy.json, agent-tools.json, agent-recipes.json); full credential lifecycle (POST /agents/onboarding, /oauth/token, /introspect, /credentials/rotate, /credentials/revoke); POST /agents/session; tenant management (POST /tenants, GET /tenants, GET /tenants/{tenant_id}, GET /tenants/{tenant_id}/usage) with advisory daily quotas; preflight gates; Redis-backed deterministic generation with idempotency keys; status / quality / grounding / events endpoints; trust_summary block in /quality payload (verdict, grounding_verified, buyer_note); HITL checkpoints; exports; GET /demo/run (no auth required); GET /llms.txt.grantflow.mcp.server) and optional streamable-http transports; 17 named tools covering the full agent lifecycle — agent onboarding, session, introspection, OAuth token exchange, credential rotation and revocation, sandbox registration, ingest, preflight, generation start, status / quality / events, HITL approve and list-pending, export payload, and a sandbox happy-path runner.GenericDonorStrategy with a shared results framework.The next operator running a grant proposal cycle may be an AI agent, not a person clicking through a dashboard. That agent still needs operational controls: discovery, typed contracts, auth, idempotency, preflight gates, review checkpoints, audit events, and deterministic smoke tests.
A single LLM endpoint with a "draft a proposal" prompt is not a workflow — it is an unbounded text generator without traceability, governance, or export-ready outputs.
Donor reviewers and audit teams need traceable evidence; agent runtimes need stable contracts and bounded retries; NGO operators need human checkpoints and review SLAs. All three have to live in one API.
Most agent-assisted proposal workflows are wrappers around a chat model. They produce text fluently. They struggle with the operational shape of real grant work: tenanted access, idempotent generation across retries, donor-specific preflight gates, structured review states, audit events, grounding inspection, and exportable evidence packs.
Buyers cannot ship that into an EU or UN review process. Agent runtimes cannot orchestrate it reliably. Operations teams cannot audit it after the fact.
.well-known discovery, not a chat UI.AGENTS.md as the shortest path for AI agents to discover, authenticate, and use GrantFlow without reading the full repo.tenant_id and scopes when API-key auth is active.POST /tenants, GET /tenants, GET /tenants/{tenant_id}, GET /tenants/{tenant_id}/usage with advisory daily quotas on jobs and ingest.streamable-http transports; 17 named tools spanning onboarding, credentials, ingest, preflight, generation, status / quality / events, HITL, export, and a sandbox happy-path runner.trust_summary block to the /quality payload — verdict, grounding_verified, buyer_note — so a buyer or agent can read the trust state without parsing the full response.GET /demo/run (no auth required, result in ~2 seconds) and GET /llms.txt for machine-readable project description..docx, .xlsx, and buyer-facing ZIP evidence packs..well-known endpoints before any real call.trust_summary with verdict and buyer note), grounding, citations, version, and lifecycle events on stable endpoints..docx, .xlsx, and ZIP evidence packs that are ready for donor review.GET /demo/run) with no auth required and a machine-readable llms.txt for agent discovery.GrantFlow's trust-layer differs from the markdown-skill repos in the portfolio: it lives in code and contracts, not just documentation. The buyer-facing trust artifacts are now explicit:
docs/agents/trust-report.md) — what trust_summary.verdict (export_ready / needs_review / needs_revision / incomplete) means, what it does not mean, and the recommended agent workflow. Honest limitations are stated: grounded: true reflects the runtime grounding gate, not factual correctness; critic_passed: true means no open high-severity findings, not zero findings; export_ready is a governance signal, not a legal certification.docs/agents/error-contract.md) — structured detail.code / retryable / next_action shape for every agent-facing endpoint; agents branch on machine-readable codes, not on HTTP status or free-form text.docs/agents/threat-model.md, 2026-05) — ten classes of input/processing-side gaps GrantFlow does not catch: prompt-injection in proposal text or RAG content, factual correctness, hallucinated citations that look well-formed, donor template drift, cross-tenant content leakage through shared embeddings, spoofed donor profile, replay within the idempotency window, adversarial inputs at scale, operator misuse of hitl_enabled=false. A passing export_ready verdict means GrantFlow's governance signals all passed — not that the proposal is correct, safe, or submittable without human review.hitl_enabled=true.x-grantflow-agent-recipes extension and a dedicated recipes endpoint.grantflow.mcp.server) and optional streamable-http (grantflow.mcp.fastmcp_server) via pip install "grantflow[mcp]".make bootstrap-dev).fastapi, mcp, agentic-ai, ai-agents, api-first, grant-proposals, grant-management, proposal-workflow, human-in-the-loop, traceability, donor-workflows, nonprofit-tech, workflow-automation, document-generation, openapi.This project demonstrates how I think about practical infrastructure for agent-driven nonprofit operations: typed contracts before chat UI, governed credentials before "trust the agent", deterministic generation before clever prompting, HITL and audit events before "just ship it", and exports that hold up in front of an EU or UN reviewer.
The honest scope is also part of the design: customer pilot data stays out of the public repository, no production adoption is claimed, and the README's "Maturity and pilot offer" section names current strongest donor-template paths rather than customer references.
Author: Vassiliy Lakhonin