Skip to main content
Glama

balanceit-mcp

A stdio MCP server that drives your own balance.it account through its recipe autobalancer.

Balance IT formulates home-prepared canine and feline diets. This server acts as your signed-in account. It exposes the calorie calculator, the food catalogue, and the recipe builder as MCP tools.

Use your own account credentials. Read and respect the Balance IT terms of service before you automate anything against the site. This project has no affiliation with Balance IT.

What it does

The server exposes six tools over the Model Context Protocol.

Tool

Kind

Latency

Purpose

calculate_calories

HTTP

under 500 ms

Return the daily maintenance calories for a pet.

search_foods

HTTP

under 500 ms

Search the curated m* and USDA n* food entries.

list_catalogue

Browser

5 to 8 s, then cached 7 days

Return the full ingredient catalogue for one species and life stage.

generate_recipe

Browser

45 to 90 s

Fill the pet profile, choose ingredients, and wait for the built options.

get_recipe

Browser

5 to 10 s

Read the macros and the gram weights for one recipe option.

session_status

Local

instant

Report whether a usable session is on disk.

Every tool returns structured JSON. Two of the tools call the site JSON endpoints directly. The other three drive a Chrome browser through Playwright. The /recipes page and the build flow render only inside a logged-in browser session.

A dead session produces a distinct session_expired error with a remedy hint. The site answers an unauthenticated request with HTTP 200 and an empty array. A caller cannot otherwise tell a dead session from an empty result.

Related MCP server: nutrition-mcp

Requirements

  • Node.js 20 or later.

  • Google Chrome. Playwright launches it through channel: 'chrome'.

  • A Balance IT account of your own.

  • A logged-in balance.it browser session, exported as a Playwright storageState file.

Install

npm install
npm run build

Configuration

Session state

The server reads its session from ~/.config/balanceit/state.json. It creates that file with mode 0600, inside a directory with mode 0700.

Export a session yourself. Sign in to balance.it in a Playwright Chromium context. Then write context.storageState({ path }) to the configuration path above. The export must hold the _balance_session and aws-waf-token cookies on the balance.it domain.

Set BALANCEIT_STATE_SEED to seed the session from an export that sits elsewhere. On first run the server copies that file to the configuration path, and it applies mode 0600. The server ignores the variable once the configuration file exists.

Re-export the session when a tool returns session_expired. The session cookies expire after a few days.

Environment variables

Variable

Purpose

BALANCEIT_EMAIL

Your balance.it account email.

BALANCEIT_PASSWORD

Your balance.it account password.

BALANCEIT_STATE_SEED

Path to a storageState export used to seed the session.

The server reads the credentials from the environment only. It never writes them to disk. It never logs them. It never puts them in an error message.

The credentials are documented for a future automatic sign-in. The current code does not use them, because it authenticates from the exported session.

MCP client

Add the server to your MCP client configuration. Replace /path/to/balanceit-mcp with the path to your own clone.

{
  "mcpServers": {
    "balanceit": {
      "command": "node",
      "args": ["/path/to/balanceit-mcp/dist/index.js"]
    }
  }
}

Usage

Run the browser tools from a foreground shell. Playwright with channel: 'chrome' does not launch Chrome from a backgrounded shell on macOS. The Node process then stays alive, logs nothing, and looks like a hang.

generate_recipe

generate_recipe takes a pet profile and a list of food_id values. It returns one option list, plus three fields for verification.

  • submitted_food_ids lists the identifiers read from the hidden form inputs at submit time. This is what balance.it received.

  • typeahead_added lists the subset that the typeahead added rather than a chip click.

  • missing_from_first_option lists each requested ingredient that the first built option does not appear to contain. An empty list is the normal case. A non-empty list means that the site optimizer substituted or skipped the ingredient on that option. Call get_recipe on each option when you need per-option certainty.

The tool rejects a bad food_id before it opens a browser. A malformed identifier fails immediately. A well-formed identifier that search_foods does not return fails after the resolve pass.

Contract notes

These details describe how the site behaves. Keep them so that later maintenance does not have to rediscover them.

  • The /recipes page returns an empty body to a plain fetch. Use the browser tools for any DOM content.

  • The two JSON endpoints are /r/api/v1/pets/vet_approvals/auto_calculate_calories and /r/api/v1/foods/search/<QUERY>. Both work with a plain fetch, the persisted cookie header, a normal desktop user agent, and X-Requested-With: XMLHttpRequest.

  • foods/search takes the query as a path segment. The ?q= form returns 404.

  • On tab 2 of /recipes, the ingredient chips sit inside seven collapsed accordions. Each chip is present in the DOM but not visible. Playwright times out on a click against a hidden chip. Click the accordion header (.ingredients-box > a) first.

  • The one-pot toggle #one_pot_cooking is hidden by CSS. Toggle the visible label[for=one_pot_cooking] instead.

  • A food that has no chip is added through the tab-2 typeahead (input.food-typeahead.tt-input). This is the common case when one_pot_cooking is true.

  • Each typeahead suggestion carries a class of the form li-<category>-<food_id>, such as li-protein-n13326. Match that class to find the exact suggestion, then click it with the mouse.

  • A .tt-suggestion click reports success without registering the food when it targets the wrong suggestion. Do not click "the first suggestion". Match the li-<category>-<food_id> class.

  • Every registered selection appears as a hidden <input name="<category>_foods[]" value="<food_id>">. The pre-submit invariant is that every requested identifier is present as such an input.

  • Typing a saved pet name by hand reads as an edit to that pet record. The site then raises an update gate. Select the pet from the #pet_name typeahead instead, which sets the hidden pet_id and raises no gate.

  • A recipe build is asynchronous. After the submit navigation lands on /recipes/<recipe_id>, poll until the option cards render or the "N of N complete" status reaches parity.

Repository layout

src/
  index.ts    MCP server entry and tool registration
  session.ts  storageState persistence and Cookie header derivation
  http.ts     the two pure-fetch tools, SessionError, and UpstreamError
  browser.ts  Playwright flows for catalogue, generate, and detail scrape
scripts/
  smoke.ts    live check against the site

Tests

This repository has no offline test suite. scripts/smoke.ts runs against the live site, and it needs a valid session.

npm run smoke

The smoke run calls calculate_calories for a spayed female and an intact female. It asserts that each result falls inside the reported calorie bracket. It checks that search_foods('chicken') returns m4. It then builds a recipe. It repeats the build for the same pet name, which exercises the saved-pet gate. It reads the first option back. It asserts that a malformed food_id is rejected.

The reference profile for the run is an adult dog of 22 kg.

Set SMOKE_SKIP_RECIPE=1 to skip the slow browser leg.

SMOKE_SKIP_RECIPE=1 npm run smoke

Development

npm run dev     # run the server from source through tsx
npm run build   # compile TypeScript into dist/
npm start       # run the compiled server

Licence

Licensed under the PolyForm Noncommercial License 1.0.0. Copyright 2026 Seraphine Renard.

Available Tools

6 tools
calculate_caloriesCalculate maintenance caloriesB

Balance IT's daily kcal estimate for a pet given species, weight, age, and reproductive status. HTTP endpoint, sub-second.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYes
genderYes
weightYes
speciesYes
age_unitYes
weight_unitYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It mentions only 'HTTP endpoint, sub-second,' which adds minor performance/network context, but it does not disclose whether the operation is read-only, has side effects, requires authentication, or how errors are handled. This is a significant gap for a calculation tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the main purpose. The second sentence adds a useful performance/endpoint detail. The phrase 'Balance IT's' is slightly awkward and could be clearer, but overall the description is concise with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter calculation tool with no output schema, the description is adequate but incomplete. It states the output concept ('daily kcal estimate') but does not specify output format, limitations (e.g., the schema restricts species to canine and feline, yet the description says 'pet' generically), or any caveats. It could benefit from clarifying supported species and return type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% property descriptions, so the description adds high-level context by naming the key inputs (species, weight, age, reproductive status). However, it does not explain the units, the gender enum meanings, or how parameters relate to each other beyond what the schema already shows. It partially compensates for the low schema coverage but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool produces a daily kcal estimate for a pet based on species, weight, age, and reproductive status. This specific verb+resource+scope distinguishes it from sibling tools focused on recipes and food searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a calorie estimate is needed given the listed inputs, but it does not explicitly state when to prefer this over alternatives, nor does it mention exclusions or when not to use it. The context is clear but not prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_recipeBuild custom recipes for a petA

Fill the pet profile, pick ingredient food_ids, submit, and wait for Balance IT to build N balanced recipe options. Browser-driven; typically 60-90s. Food_ids come from search_foods or list_catalogue. The response includes submitted_food_ids (ground-truth from the form) and missing_from_options (a soft signal that a requested ingredient did not appear in the built recipes; empty in the happy path). Any food_id that could not be added throws a clear error rather than silently dropping.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYes
genderYes
weightYes
speciesYes
age_unitYes
food_idsYes
pet_nameYes
num_optionsNo
weight_unitYes
one_pot_cookingNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosure. It reveals that the tool is 'Browser-driven; typically 60-90s,' explains the response fields (submitted_food_ids and missing_from_options), and clearly states error behavior: 'Any food_id that could not be added throws a clear error rather than silently dropping.' This is exceptional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, starting with the action, then providing latency, input provenance, response details, and error behavior in four sentences. Every sentence adds essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 10 parameters, no output schema, and no annotations, the description covers the workflow, expected latency, key response elements, and error handling. It gives a user enough context to use the tool correctly and set expectations, making it highly complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining the workflow, that food_ids come from other tools, and that N options are built. However, it does not describe all parameters (e.g., one_pot_cooking, weight_unit, age_unit) beyond the schema's enum names, leaving some gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Fill the pet profile, pick ingredient food_ids, submit, and wait for Balance IT to build N balanced recipe options.' It uses a specific verb (build) and resource (balanced recipe options), and distinguishes itself from siblings like search_foods, list_catalogue, and calculate_calories by focusing on recipe generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by stating 'Food_ids come from search_foods or list_catalogue,' which tells the user how to obtain necessary inputs. It implicitly defines the use case (generating recipes) without explicitly naming alternatives, but the integration with other tools gives practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recipeFetch a built recipe's detailA

Load /recipe/ and extract calories, macro split, gram-weight ingredient list, and required supplement. Browser-driven; ~5-10s.

ParametersJSON Schema
NameRequiredDescriptionDefault
option_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It adds behavioral context by noting 'Browser-driven' and '~5-10s' latency, which are useful traits. However, it does not disclose whether the operation is read-only, what happens on missing recipe, or whether it requires any existing session, leaving several behavioral aspects unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence plus a short latency note. It avoids redundancy and front-loads the core action and output data, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, no output schema), the description provides a reasonable overview of inputs and expected outputs. It lists the key data points returned but does not specify format or error handling. Since no output schema exists, a bit more detail on the return structure would improve completeness, but the current level is adequate for a simple fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines option_id as a string, but the description embeds it in the URL /recipe/<option_id>, giving it clear semantic meaning as the built recipe identifier. Since schema description coverage is 0%, the description compensates well by explaining how the parameter is used, though it does not enumerate possible values or origins.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool loads /recipe/<option_id> and extracts specific data (calories, macro split, gram-weight ingredient list, required supplement), using a specific verb 'load' and 'extract'. This distinguishes it from siblings like generate_recipe (generates) and calculate_calories (calculates), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for retrieving details of a built recipe, but it does not explicitly state when to use this tool versus alternatives like generate_recipe or list_catalogue. It also does not mention preconditions such as needing an existing recipe id or a live browser session, leaving usage context somewhat implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_catalogueList the full ingredient chip catalogueA

The complete chip catalogue for a species (79 items canine adult; 51 marked one-pot-compatible). Cached for 7 days. Browser-driven; first call ~5-8s.

ParametersJSON Schema
NameRequiredDescriptionDefault
speciesYes
one_pot_onlyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the burden. It discloses that results are cached for 7 days and that the tool is browser-driven with a 5-8s first call, which are useful behavioral insights beyond a basic list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, and every sentence adds value: complete catalogue, cache duration, and latency expectation. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers purpose, parameters, caching, and performance, which is solid for a simple list tool. It lacks details about the return format or potential pagination, but the information provided is sufficient for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds meaning by giving item counts for canine adult (79) and noting 51 are one-pot-compatible. This partially explains the 'species' and 'one_pot_only' parameters, though it does not cover all enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the complete ingredient chip catalogue for a species, using a specific verb and resource. It distinguishes itself from sibling tools by emphasizing 'full catalogue' versus recipe generation, calorie calculation, or food search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: it is for retrieving the complete catalogue for a species, but no explicit when/when-not guidance or mention of alternatives is given. The description does not state 'for filtered search use search_foods' or similar exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_foodsSearch Balance IT food catalogueB

Fuzzy search over Balance IT's food database. Returns curated 'm*' rows plus USDA reference foods. HTTP endpoint, sub-second.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
speciesYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It reveals that results include curated 'm*' rows and USDA reference foods and mentions sub-second performance. However, it does not explain what 'm*' means, the result format, or error/empty behavior, leaving notable gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary purpose. Each sentence adds information, though the 'HTTP endpoint' detail is somewhat redundant in an MCP context. Overall, it is well-structured and free of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple (2 parameters, no output schema), and the description provides the core purpose and return composition. However, it lacks parameter semantics and any indication of the response structure, so the agent may struggle to invoke it correctly and interpret results fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 mention the 'query' or 'species' parameters at all. The agent must rely on a bare schema with no parameter descriptions, making it impossible to infer parameter meaning or formatting from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Fuzzy search' and names the resource 'Balance IT's food database.' It also clarifies the result composition (curated 'm*' rows plus USDA reference foods), which clearly distinguishes it from sibling tools like list_catalogue or get_recipe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: if you need to search for foods, this is the tool. There is no explicit mention of when to use it instead of alternatives, nor any exclusion criteria. Sibling tools are not referenced for differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_statusReport persisted session statusA

Whether a usable balance.it session is on disk. Useful to distinguish 'dead session' from 'real failure' before running slower tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral transparency. It states the tool checks for a session 'on disk' which adds useful context about side-effect-free inspection. However, it does not clarify what 'usable' means, how the result is returned (e.g., boolean, object), or whether any network/auth is involved. This is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: the first states the core function, the second adds usage guidance. No wasted words, front-loaded with the most important information. This is ideal for a simple status-check tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (0 params, no output schema), the description is fairly complete. It covers what it does and when to use it, implying a boolean result via 'Whether.' It does not specify the exact output format or session validity criteria, but for a simple check this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100% (empty schema). The baseline for 0 params is 4. The description adds no parameter details because none exist, but it gives enough context about what the tool evaluates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: checking whether a usable balance.it session exists on disk. This is a specific verb+resource combination that distinguishes it from recipe/calorie sibling tools. The title 'Report persisted session status' aligns with the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly gives usage context: 'Useful to distinguish "dead session" from "real failure" before running slower tools.' It indicates when to use this tool (as a pre-check) and implies an alternative (slower tools). It lacks an explicit 'when not to use' but the context is clear enough.

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.

  1. 6 tool updatesv0.1.0
    • First observedcalculate_calories
    • First observedgenerate_recipe
    • First observedget_recipe
    • First observedlist_catalogue
    • First observedsearch_foods
    • First observedsession_status

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource and action: loading a recipe, calculating calories, searching foods, listing the catalogue, generating a recipe, and checking session state. Even though get_recipe and generate_recipe both involve recipes, the load-vs-create distinction is clear from the descriptions.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (get_recipe, calculate_calories, search_foods, list_catalogue, generate_recipe). session_status is a small deviation that reads as a state check rather than an action, but it's still understandable and consistent in style.

Tool Count5/5

Six tools is a well-scoped set for a Balance It nutrition MCP. Each tool covers a core part of the workflow (estimating calories, finding ingredients, generating recipes, loading results) without being bloated or too thin.

Completeness4/5

The core lifecycle is covered: search/select ingredients, generate recipes, retrieve a specific recipe, and estimate calories. Minor gaps exist, such as no explicit recipe listing or update/delete, but these are not essential for the domain and the workflow is functional.

Maintenance

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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/seraphinerenard/balanceit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server