# netsi (io.github.bluedotsoft/netsi): tool descriptions scored

- tools/list taken: 2026-11-02 (UTC)
- From: [Official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/io.github.bluedotsoft%2Fnetsi/versions/latest)
- Connected to: https://netsi.io/mcp
- Homepage: https://netsi.io/
- Repository: https://github.com/bluedotsoft/netsi-agent
- Scoring rules: v2
- Tools: 51
- Average: 49.2 / 100 (Cloudy)
- Near-identical pairs: 0

This page shows how netsi (io.github.bluedotsoft/netsi)'s tool descriptions scored, the issues found and the names of its tools and parameters. The descriptions are the server's own: read them where the copy came from.

Forecall asked the URL this server lists in the official MCP Registry for its tools/list once, on the date above, without calling any tool. The server may have changed since.

## Across the server

- Major: 51 tools. Above 40, models choose less accurately.
- Minor: The server's instructions are 4163 characters. Claude Code reads only the first 2,048 by default (Codex 0.154.0 reads them whole). Put what the server is for first.

## Tools

- `get_expense`: 29 / 100
  - Major: The description only restates the name (9 words).
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: expense_id.
  - Minor: Required identifiers whose description does not say where the value comes from: expense_id. Name the tool or the place that returns it, or models look it up first.
- `list_payments`: 33 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: group_id, status, cursor, limit.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `list_expenses`: 34 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: group_id, since, until, paid_by, include_deleted, cursor, limit.
  - Minor: String arguments with no constraint or example: since, until.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: The meaning of the boolean argument include_deleted is unclear.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `list_invites`: 34 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: direction, group_id.
  - Minor: No `required` list, so every argument is optional.
- `list_plans`: 34 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: when, role, cursor, limit.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `get_settlement_plan`: 37 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: group_id, include_pending.
  - Minor: The meaning of the boolean argument include_pending is unclear.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `list_groups`: 37 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: include_archived, cursor, limit.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument include_archived is unclear.
- `get_group`: 38 / 100
  - Major: Arguments without a description: group_id.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `update_me`: 38 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: display_name, description.
- `get_balances`: 40 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: group_id.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `update_group`: 40 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: group_id, name, description.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `dismiss_address_book_match`: 42 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: match_id, dismissed.
  - Minor: The meaning of the boolean argument dismissed is unclear.
  - Minor: Required identifiers whose description does not say where the value comes from: match_id. Name the tool or the place that returns it, or models look it up first.
- `list_address_book`: 42 / 100
  - Major: Arguments without a description: cursor, limit, query.
  - Minor: No `required` list, so every argument is optional.
- `list_address_book_matches`: 42 / 100
  - Major: Arguments without a description: cursor, limit, new_only.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument new_only is unclear.
- `list_contacts`: 42 / 100
  - Major: Arguments without a description: state.
  - Minor: No `required` list, so every argument is optional.
- `respond_plan`: 43 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: plan_id, response, version, comment.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `ack_inbox`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: item_ids, action.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: item_ids. Name the tool or the place that returns it, or models look it up first.
- `cancel_plan`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: plan_id.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `delete_expense`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: expense_id.
  - Minor: Required identifiers whose description does not say where the value comes from: expense_id. Name the tool or the place that returns it, or models look it up first.
- `get_plan`: 45 / 100
  - Major: Arguments without a description: plan_id.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `respond_invite`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: invite_id, action.
  - Minor: The description mentions none of its 3 or more arguments.
- `ack_address_book_matches`: 48 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: match_ids.
  - Minor: Required identifiers whose description does not say where the value comes from: match_ids. Name the tool or the place that returns it, or models look it up first.
- `request_address_book_friendship`: 48 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: match_id.
  - Minor: Required identifiers whose description does not say where the value comes from: match_id. Name the tool or the place that returns it, or models look it up first.
- `revoke_invite`: 48 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: invite_id.
  - Minor: Required identifiers whose description does not say where the value comes from: invite_id. Name the tool or the place that returns it, or models look it up first.
- `withdraw_item`: 48 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: item_id.
  - Minor: Required identifiers whose description does not say where the value comes from: item_id. Name the tool or the place that returns it, or models look it up first.
- `add_contact`: 49 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: handle, via_group_id.
- `confirm_payment`: 49 / 100
  - Major: Arguments without a description: payment_id, action, note.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: payment_id. Name the tool or the place that returns it, or models look it up first.
- `record_payment`: 49 / 100
  - Major: Arguments without a description: group_id, from, to, amount, note, occurred_at.
  - Minor: String arguments with no constraint or example: occurred_at.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `update_plan`: 49 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: plan_id, version, title, ends_at, place, description, add_invitees, remove_invitees.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `respond_contact_request`: 50 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: action.
  - Minor: The description mentions none of its 3 or more arguments.
- `update_expense`: 51 / 100
  - Major: Arguments without a description: expense_id, amount, currency, description, paid_by, split, occurred_at, notes, receipt_url.
  - Minor: String arguments with no constraint or example: occurred_at.
  - Minor: Required identifiers whose description does not say where the value comes from: expense_id. Name the tool or the place that returns it, or models look it up first.
- `create_group`: 52 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: name, currency, description.
- `remove_contact`: 52 / 100
  - Major: Says nothing about when to use it, or when not to.
- `create_plan`: 53 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: title, place, description, invitees.
- `finish_join`: 53 / 100
  - Major: Arguments without a description: poll_token.
- `leave_group`: 53 / 100
  - Minor: Arguments without a description: group_id.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `remove_member`: 53 / 100
  - Major: Arguments without a description: group_id, agent.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `get_inbox`: 54 / 100
  - Major: Arguments without a description: since, include_seen, limit.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument include_seen is unclear.
- `archive_group`: 56 / 100
  - Minor: Arguments without a description: group_id.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `leave_in_inbox`: 58 / 100
  - Major: Arguments without a description: subject, parts, parts[].kind, parts[].kind, parts[].title, parts[].kind, parts[].schema, parts[].kind, parts[].attachment_id, parts[].name, parts[].mime, parts[].size, parts[].sha256, notify_when_seen.
  - Minor: String arguments with no constraint or example: parts[].kind, parts[].kind, parts[].kind, parts[].kind.
  - Minor: The meaning of the boolean argument notify_when_seen is unclear.
- `get_activity`: 59 / 100
  - Major: Arguments without a description: group_id, since, limit.
  - Minor: No `required` list, so every argument is optional.
- `add_expense`: 60 / 100
  - Major: Arguments without a description: group_id, amount, currency, description, paid_by, split, occurred_at, notes, receipt_url, dry_run.
  - Minor: String arguments with no constraint or example: occurred_at.
  - Minor: The meaning of the boolean argument dry_run is unclear.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `create_invite`: 60 / 100
  - Major: Arguments without a description: group_id, target_handle, expires_in, max_uses, note.
  - Minor: Required identifiers whose description does not say where the value comes from: group_id. Name the tool or the place that returns it, or models look it up first.
- `register_agent`: 60 / 100
  - Major: Arguments without a description: handle, display_name, description, invite_code, platform_invite_code.
- `join_group`: 61 / 100
  - Minor: Arguments without a description: code.
- `get_address_book_status`: 62 / 100
- `get_settings_link`: 63 / 100
- `get_me`: 69 / 100
- `join_network`: 69 / 100
  - Minor: Arguments without a description: display_name.
- `block_contact`: 70 / 100
- `rotate_api_key`: 72 / 100

Is your server listed here and you would rather it were not? Email support@forecall.dev, and we will take it off within 7 days.

[All scored servers](https://forecall.dev/en/servers)
