Libib MCP by usefulapi

Read patrons, managers and accounts; create and update patrons in Libib.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
78%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,354Tokens (tool definitions)
~1.5 KBTypical response size
Moderate attention impact (1.06% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "libib": {
      "url": "https://libib.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://libib.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢libib_list_accounts

Show the Libib account behind this API key: organization name, owner, URL alias and API ID. Pro keys return one account. Libib API: GET /accounts.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢libib_list_managers

List every manager on the Libib account, including the owner, with each manager's role (owner, admin, manager or lender). Libib API: GET /managers.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢libib_get_manager(email)

Show one manager's name, email and role, found by the manager's email address. Libib API: GET /managers/{email}.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "minLength": 3,
      "maxLength": 320,
      "description": "Email address of the manager."
    }
  },
  "required": [
    "email"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢libib_list_patrons(page)

List one page of patrons (50 per page) with their barcode, name, email, tags, patron ID, address and freeze status. The result gives total and pages; ask for the next page to read more. Libib API: GET /patrons?page=.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (50 patrons per page, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢libib_get_patron(id)

Show one patron's full record, found by barcode or email address. Libib API: GET /patrons/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The patron's barcode or email address."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴libib_create_patron(first_name, last_name, email, notification_emails, tags, ...)

Create a new patron on the Libib account. first_name and last_name are required. Libib assigns the barcode itself. The patron password is not set here. Libib API: POST /patrons.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Patron's first name (required)."
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Patron's last name (required)."
    },
    "email": {
      "description": "Patron's email. Must be unique on the account.",
      "type": "string",
      "maxLength": 320
    },
    "notification_emails": {
      "description": "Up to 3 comma-separated emails for notifications.",
      "type": "string",
      "maxLength": 500
    },
    "tags": {
      "description": "Comma-separated patron tags.",
      "type": "string",
      "maxLength": 500
    },
    "patron_id": {
      "description": "Custom ID (not required to be unique).",
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "description": "Contact phone number.",
      "type": "string",
      "maxLength": 60
    },
    "address1": {
      "description": "Street address line 1.",
      "type": "string",
      "maxLength": 200
    },
    "address2": {
      "description": "Street address line 2.",
      "type": "string",
      "maxLength": 200
    },
    "city": {
      "description": "City.",
      "type": "string",
      "maxLength": 200
    },
    "state": {
      "description": "State (2-character abbreviation for US addresses).",
      "type": "string",
      "maxLength": 100
    },
    "country": {
      "description": "2-character country code.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "zip": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 20
    }
  },
  "required": [
    "first_name",
    "last_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴libib_update_patron(id, first_name, last_name, email, notification_emails, ...)

Change fields of one existing patron, found by barcode or email. Omit a field to leave it unchanged. An empty string removes that value from the patron. The patron password and barcode are not changed here. Libib API: PATCH /patrons/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The patron's barcode or email address."
    },
    "first_name": {
      "description": "Patron's first name.",
      "type": "string",
      "maxLength": 200
    },
    "last_name": {
      "description": "Patron's last name.",
      "type": "string",
      "maxLength": 200
    },
    "email": {
      "description": "Patron's email. Must be unique on the account.",
      "type": "string",
      "maxLength": 320
    },
    "notification_emails": {
      "description": "Up to 3 comma-separated emails for notifications.",
      "type": "string",
      "maxLength": 500
    },
    "tags": {
      "description": "Comma-separated patron tags.",
      "type": "string",
      "maxLength": 500
    },
    "patron_id": {
      "description": "Custom ID (not required to be unique).",
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "description": "Contact phone number.",
      "type": "string",
      "maxLength": 60
    },
    "address1": {
      "description": "Street address line 1.",
      "type": "string",
      "maxLength": 200
    },
    "address2": {
      "description": "Street address line 2.",
      "type": "string",
      "maxLength": 200
    },
    "city": {
      "description": "City.",
      "type": "string",
      "maxLength": 200
    },
    "state": {
      "description": "State (2-character abbreviation for US addresses).",
      "type": "string",
      "maxLength": 100
    },
    "country": {
      "description": "2-character country code. An empty string clears the country.",
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "minLength": 2,
          "maxLength": 2
        }
      ]
    },
    "zip": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 20
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools