Install the OpenFeature SDK for your language (e.g., `npm install @openfeature/server-sdk` for Node.js)
Create a class implementing the `Provider` interface; implement `resolveBooleanEvaluation`, `resolveStringEvaluation`, `resolveNumberEvaluation`, and `resolveObjectEvaluation` methods
Inside each resolve method, call your feature flag backend API or SDK, map the result to an OpenFeature `ResolutionDetails` object (including `value`, `reason`, and optionally `variant`)
Implement `initialize()` to set up connections or caches when the provider is registered, and `shutdown()` to clean up
Register your provider globally: `OpenFeature.setProvider(new MyCustomProvider())` before evaluating any flags
Evaluate flags through the OpenFeature client API (`client.getBooleanValue('flag-key', defaultValue, context)`) — the SDK routes calls to your provider transparently
Known gotchas
OpenFeature providers must handle errors gracefully and return a `ResolutionDetails` with an appropriate `errorCode` rather than throwing — unhandled exceptions in a provider can crash the calling application
The EvaluationContext passed to resolve methods is immutable and merged from global, transaction, and client contexts; do not mutate it inside the provider
If your backend requires async initialization (loading flags from an API), complete this work inside `initialize()` — returning from `initialize()` before the data is ready causes the provider to serve stale or default values
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp