# Brush Pack

> Paint and wallpaper amounts, weather checks and lead paint safety for UK decorators' AI

- name: io.github.Nero-Engine/brush-pack
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 89/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.Nero-Engine%2Fbrush-pack
- tools: https://api.protogrid.dev/v1/servers/io.github.Nero-Engine%2Fbrush-pack/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "brush-pack": {
      "type": "http",
      "url": "https://brush-pack.nerolabs.workers.dev/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-1d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 6,334 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 1 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 6,334 tokens to load them all
- tool set hash: 2c449d8047e71507b26c0c78cb3fbc47
- tools last changed: 2026-11-13T06:15:55.569Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.Nero-Engine/brush-pack.svg)](https://protogrid.dev/servers/io.github.Nero-Engine/brush-pack)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-13 `trade_profile` changed (description)
  - before: Checks the decorator's own business details (Nero Trade Profile v1: trading name, Companies House number, trade body and number such as PDA or TrustMark, postcode, contact) and returns them cleaned, with a stable `nero_trade_ref` computed from the trade body membership or company number. Pass the same object as `trade` to any other tool. Brush Pack stores nothing. The same profile and reference can later be used to sign the business into Nero Work, the agent job exchange for trades.
  - after: Checks the decorator's own business details (Nero Trade Profile v1: trading name, Companies House number, trade body and number such as PDA or TrustMark, postcode, contact) and returns them cleaned, with a stable `nero_trade_ref` computed from the trade body membership or company number. The same object, given as `trade` to the other tools, prefills their answers. Brush Pack stores nothing. The same profile and reference can later be used to sign the business into Nero Work, the agent job exchange for trades.

Full history: https://api.protogrid.dev/v1/servers/io.github.Nero-Engine%2Fbrush-pack/changes

## Remotes

- https://brush-pack.nerolabs.workers.dev/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (8)

- `exterior_weather_check`: For a UK postcode (or latitude and longitude) and dates from today up to 8 days ahead, fetches the hourly forecast (MET Norway) and checks each working hour against typical limits for the paint type: minimum temperature, humidity, 3 C above dew point, rain chance, wind, and a rain-free drying time after each coat. Returns each day's verdict (good, good_but_watch_rain, marginal, no), the best painting window, the main problems and an indicative recoat time at that day's temperature. Pass the data sheet's own limits to override. Example: {"postcode":"LS1 4AP","paint_type":"water_based_masonry","start_date":"2026-11-14","end_date":"2026-11-18"}.
- `job_estimate`: Hours and days on site for a decorating job from rooms (same sizes as paint_quantity, with walls, ceiling and woodwork coats, new_plaster for mist coats) and extra tasks (strip_wallpaper_m2, hang_wallpaper_rolls, hang_patterned_wallpaper_rolls, masonry_smooth_m2_per_coat, masonry_rough_m2_per_coat, door_per_coat, window_per_coat, skirting_m_per_coat, custom_hours), plus prep (light, medium, heavy) and daily set up and clean up. With a day or hourly rate, materials, markup and VAT it gives a priced quote with lines. Rates are indicative for one experienced decorator. Example: {"rooms":[{"name":"Lounge","length_m":4,"width_m":3.5,"height_m":2.4}],"prep_level":"medium","day_rate_gbp":200}.
- `lead_paint_risk`: Judges how likely old paint is to contain lead from the build year, surfaces, paint condition and any test result, checks the planned removal methods (dry sanding, blowlamps and dry scraping are refused; wet abrading, chemical strippers and heat guns below about 450 C are allowed with care), and gives the safe test, removal, clean-up and waste steps from HSE and UK guidance, plus the Control of Lead at Work duties. Returns `urgency` only if paint has already been disturbed unsafely. Example: {"build_year":1935,"surfaces":["windows","doors"],"planned_methods":["dry_sanding"],"children_under_6_or_pregnant":true}.
- `list_capabilities`: Lists Brush Pack's tools, surfaces, paint types and what it deliberately does not do. Free, needs no input.
- `paint_quantity`: Works out paint for a room (walls, ceiling, woodwork from length, width, height, doors and windows), an exterior (perimeter x height plus gables, less openings) or a custom list of areas. Shows areas, coats, indicative coverage per surface type, litres, litres with waste and the tins to buy (least paint left over, plus a fewer tins option). New plaster adds a mist coat; a light over dark colour change adds a wall coat. Coverage is indicative: pass the tin's figure as coverage_m2_per_litre to make it exact. Example: {"job":"room","length_m":4,"width_m":3.5,"height_m":2.4,"doors":1,"windows":1}.
- `prep_checklist`: How to prepare a surface and which paint system goes on it: checks, prep steps, system (primer, undercoat, top coats) and what to avoid, for new_plaster, previously_painted_walls, bare_softwood, mdf, previously_painted_wood, exterior_wood, bare_metal_ferrous, galvanised_or_aluminium, masonry, damp_or_water_stained, smoke_or_nicotine, mould. With `cause` (fire_or_smoke, flood, active_leak, mould) it adds the making good steps and an `urgency` value. Example: {"surfaces":["new_plaster","previously_painted_wood"]}.
- `trade_profile`: Checks the decorator's own business details (Nero Trade Profile v1: trading name, Companies House number, trade body and number such as PDA or TrustMark, postcode, contact) and returns them cleaned, with a stable `nero_trade_ref` computed from the trade body membership or company number. The same object, given as `trade` to the other tools, prefills their answers. Brush Pack stores nothing. The same profile and reference can later be used to sign the business into Nero Work, the agent job exchange for trades.
- `wallpaper_rolls`: Rolls of wallpaper for a room or feature wall from wall widths (or room length and width), height, roll width and length (default 10.05 x 0.53 m), pattern repeat and match (free, straight, half drop). Shows drops, cut length, drops per roll and rolls, plus one spare. Example: {"length_m":4,"width_m":3.5,"height_m":2.4,"pattern_repeat_cm":53,"pattern_match":"straight"}.
