Skip to main content
Glama
alsamasu

phpIPAM MCP Server

by alsamasu

phpIPAM MCP Server

A Model Context Protocol (MCP) server for phpIPAM IP Address Management. This server enables LLMs to manage IP addresses, subnets, and network sections through natural language.

Features

  • Full IPAM Operations: List, search, allocate, and release IP addresses

  • Subnet Management: View and create subnets with proper CIDR validation

  • Section Organization: Manage phpIPAM sections for logical grouping

  • Security First: Write operations disabled by default with granular toggles

  • Retry Logic: Automatic retry with exponential backoff for transient errors

  • Docker Ready: Minimal container image with non-root user

Related MCP server: MikroTik RouterOS MCP

Quick Start

docker run -i --rm \
  -e PHPIPAM_BASE_URL=https://phpipam.example.com \
  -e PHPIPAM_APP_ID=myapp \
  -e PHPIPAM_USERNAME=admin \
  -e PHPIPAM_PASSWORD=your-password \
  mcp/phpipam-mcp

From Source

# Clone the repository
git clone https://github.com/alsamasu/phpipam-mcp.git
cd phpipam-mcp

# Install dependencies
npm install

# Build
npm run build

# Run (with environment variables set)
node dist/index.js

Configuration

All configuration is done through environment variables:

Required Settings

Variable

Description

Example

PHPIPAM_BASE_URL

Base URL of phpIPAM instance

https://phpipam.example.com

PHPIPAM_APP_ID

API application ID

myapp

PHPIPAM_USERNAME

phpIPAM username

admin

PHPIPAM_PASSWORD

phpIPAM password

your-password

phpIPAM API Setup

  1. Log in to phpIPAM as an administrator

  2. Go to Administration > API

  3. Create a new API application:

    • App ID: Choose a name (e.g., myapp)

    • App Security: Select User token

    • App permissions: Set based on your needs (read/write/admin)

  4. Use the App ID and your phpIPAM credentials with this server

Feature Toggles

All write operations are disabled by default for security:

Variable

Default

Description

PHPIPAM_WRITE_ENABLED

false

Enable write operations (allocate, release, upsert)

PHPIPAM_VERIFY_TLS

true

Verify TLS certificates

PHPIPAM_ENABLE_CACHE

false

Cache API responses (60s TTL)

PHPIPAM_DEBUG_HTTP

false

Log HTTP request/response details

PHPIPAM_ALLOW_SUBNET_CREATE

false

Allow subnet creation via subnets.ensure

PHPIPAM_ALLOW_SECTION_CREATE

false

Allow section creation via sections.ensure

Performance Settings

Variable

Default

Description

PHPIPAM_TIMEOUT

30000

Request timeout in milliseconds

PHPIPAM_MAX_RETRIES

3

Maximum retry attempts

PHPIPAM_RETRY_DELAY

1000

Base retry delay in milliseconds

Available Tools

Read Operations (Always Available)

Tool

Description

phpipam.health

Check connectivity and authentication

phpipam.sections.list

List all sections

phpipam.sections.get

Get section by ID or name

phpipam.subnets.list

List subnets in a section

phpipam.subnets.get

Get subnet by ID or CIDR

phpipam.addresses.list

List addresses in a subnet

phpipam.addresses.get

Get address by ID or IP

phpipam.search

Search by IP, hostname, or MAC

Write Operations (Require PHPIPAM_WRITE_ENABLED=true)

Tool

Description

phpipam.addresses.allocate

Allocate first free IP in subnet

phpipam.addresses.release

Release (delete) an IP address

phpipam.addresses.upsert

Create or update an IP address

Create Operations (Require Additional Toggles)

Tool

Required Toggle

Description

phpipam.subnets.ensure

PHPIPAM_ALLOW_SUBNET_CREATE=true

Create subnet if not exists

phpipam.sections.ensure

PHPIPAM_ALLOW_SECTION_CREATE=true

Create section if not exists

MCP Client Configuration

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "phpipam": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "PHPIPAM_BASE_URL=https://phpipam.example.com",
        "-e", "PHPIPAM_APP_ID=myapp",
        "-e", "PHPIPAM_USERNAME=admin",
        "-e", "PHPIPAM_PASSWORD=your-password",
        "mcp/phpipam-mcp"
      ]
    }
  }
}

With Write Operations Enabled

{
  "mcpServers": {
    "phpipam": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "PHPIPAM_BASE_URL=https://phpipam.example.com",
        "-e", "PHPIPAM_APP_ID=myapp",
        "-e", "PHPIPAM_USERNAME=admin",
        "-e", "PHPIPAM_PASSWORD=your-password",
        "-e", "PHPIPAM_WRITE_ENABLED=true",
        "mcp/phpipam-mcp"
      ]
    }
  }
}

Common Workflows

Lookup and Allocate IP

  1. Search for existing assignment: phpipam.search { "query": "webserver01" }

  2. Find available subnet: phpipam.subnets.list { "sectionId": "1" }

  3. Allocate IP: phpipam.addresses.allocate { "subnetId": "5", "hostname": "webserver01" }

Audit IP Usage

  1. List sections: phpipam.sections.list

  2. List subnets: phpipam.subnets.list { "sectionId": "1" }

  3. View addresses: phpipam.addresses.list { "subnetId": "5" }

Release IP

  1. Find the IP: phpipam.addresses.get { "ip": "192.168.1.50" }

  2. Release it: phpipam.addresses.release { "ip": "192.168.1.50" }

Error Handling

The server returns structured errors with these codes:

Code

Description

Retryable

AUTH

Authentication failure

No

VALIDATION

Invalid input parameters

No

NOT_FOUND

Resource not found

No

CONFLICT

Resource conflict (duplicate)

No

FORBIDDEN

Operation not permitted (toggle disabled)

No

RETRYABLE

Transient error (timeout, 5xx)

Yes

INTERNAL

Unexpected server error

No

Security Considerations

  1. Read-Only by Default: Write operations require explicit opt-in

  2. Granular Permissions: Subnet/section creation have separate toggles

  3. TLS Verification: Enabled by default, only disable for development

  4. No Secret Logging: Credentials are never logged (even with debug enabled)

  5. Non-Root Container: Docker image runs as unprivileged user

  6. Bounded Retries: Maximum 3 retries with exponential backoff

Development

# Install dependencies
npm install

# Run in development mode
npm run dev

# Run linter
npm run lint

# Run tests
npm test

# Build for production
npm run build

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Available Tools

13 tools
phpipam.addresses.allocateA

Allocate the first available IP address in a subnet. Requires PHPIPAM_WRITE_ENABLED=true

ParametersJSON Schema
NameRequiredDescriptionDefault
macNoMAC address
noteNoAdditional notes
ownerNoOwner/responsible person
hostnameNoHostname for the address
subnetIdYesSubnet ID to allocate from
descriptionNoDescription

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosure. It mentions the write-enable requirement and that allocation picks the first available IP, but it does not specify return values, failure modes (e.g., subnet full), persistence guarantees, or any other side effects. For a mutating tool this is a significant transparency gap.

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, front-loaded sentence that directly states the purpose and the critical environment requirement. Every word is useful; there is no redundancy or 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?

With no output schema, the description should ideally mention what the tool returns or how to interpret success, but it only covers the core action and the write-enable prerequisite. For a simple allocation tool with well-described parameters, it is minimally adequate but leaves important context (e.g., returned IP, error behavior) unstated.

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 input schema already provides descriptions for all 6 parameters (100% coverage), so the baseline is 3. The description adds no parameter-level detail beyond 'in a subnet', but it also does not need to since the schema already documents each parameter clearly.

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 action ('Allocate'), the resource ('first available IP address in a subnet'), and the scope ('in a subnet'). It distinguishes itself from sibling tools like release (frees an address) and upsert (sets a specific address) by emphasizing automatic first-available allocation.

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 gives an important usage precondition (PHPIPAM_WRITE_ENABLED=true) and implies the tool is for automatically assigning a free IP rather than a specific one. However, it does not explicitly compare itself to alternatives like addresses.upsert or addresses.release, nor does it state when not to use it.

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

phpipam.addresses.getA

Get a specific address by ID or IP

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAddress ID
ipNoIP address

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full behavioral burden. It only states the action without disclosing return format, error handling, permissions, or side effects, leaving significant gaps.

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, front-loaded sentence with no extraneous words. It is highly concise and efficient.

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 simple get operation with full schema coverage, the description is minimally adequate. However, it omits details like output format or behavior when both id and ip are provided, leaving some completeness gaps.

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?

Schema description coverage is 100%, with id and ip both described. The description adds no extra semantics beyond the schema, so the baseline of 3 is appropriate.

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 retrieves a specific address by either ID or IP, which is a specific verb+resource combination. It distinguishes from sibling tools like list (multiple addresses) and search (query-based).

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 implies use when a specific address is needed by ID or IP, offering clear context. However, it does not explicitly mention alternatives or when not to use this tool, so it falls short of the most explicit guidance.

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

phpipam.addresses.listA

List all addresses in a subnet

ParametersJSON Schema
NameRequiredDescriptionDefault
subnetIdYesSubnet ID

TDQS

A3.5/5.0
Behavior2/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 disclosing behavior. It only restates the tool's purpose without adding details like pagination, ordering, permissions, or response format. The term 'list' implies a read operation, but no additional context is given.

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 single sentence is direct, front-loaded with the action, and contains no filler. It is appropriately sized for a simple list operation.

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 simple with one parameter, and the schema covers that parameter. However, with no output schema and no mention of response format or limitations (e.g., pagination for large subnets), the description is minimally adequate but leaves some context gaps.

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?

Schema description coverage is 100% ('Subnet ID'), and the description reinforces the meaning of subnetId by stating addresses are in a subnet. This adds minimal value beyond the schema, so a baseline of 3 is appropriate.

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 a specific verb ('List') and resource ('all addresses in a subnet'), clearly distinguishing this from siblings like addresses.get (single address) or search. It precisely states the action and scope.

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 context is implied: use this tool to list addresses belonging to a specific subnet. However, there is no explicit guidance on when to choose this over alternatives (e.g., search or addresses.get) or any exclusions.

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

phpipam.addresses.releaseB

Release (delete) an IP address. Requires PHPIPAM_WRITE_ENABLED=true

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAddress ID
ipNoIP address (alternative to ID)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It discloses the write-enabled requirement but omits critical behavioral traits such as whether deletion is permanent, what response is returned, whether the operation is idempotent, and what happens if both id and ip are provided. The destructive nature is implied but not elaborated.

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 concise sentence that front-loads the purpose and follows with the key prerequisite. Every word earns its place with no fluff or redundancy.

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

Completeness2/5

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

Despite having only two parameters and no output schema, the description omits essential context such as return values, error behavior, reversibility, and how to choose between id and ip. The prerequisite is useful but not sufficient for a mutation tool.

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 already provides 100% coverage with descriptions for both parameters. The tool description adds no extra meaning beyond the schema, so it meets the baseline but does not exceed it.

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 action ('Release (delete) an IP address') with a specific verb and resource, distinguishing it from siblings like allocate and upsert which create/update addresses. The parenthetical 'delete' removes any ambiguity about the operation.

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

Usage Guidelines2/5

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

The description mentions a prerequisite ('Requires PHPIPAM_WRITE_ENABLED=true') but provides no guidance on when to use this tool versus alternatives. It does not state behavioral rules, exclusions, or preferred scenarios, leaving the agent to infer usage solely from the name.

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

phpipam.addresses.upsertB

Create or update an IP address. Requires PHPIPAM_WRITE_ENABLED=true

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesIP address
macNoMAC address
noteNoNotes
ownerNoOwner
hostnameNoHostname
subnetIdYesSubnet ID
descriptionNoDescription

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the write nature and an environment variable requirement, but lacks detail on idempotency, field overwrite behavior, response format, or side effects. For a mutation tool this is a significant gap.

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?

Two sentences, front-loaded with purpose and then a requirement. Zero waste.

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

Completeness2/5

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

Despite high schema coverage, the tool has 7 params, no output schema, and no annotations. The description does not explain expected behavior on conflict, prerequisites like existing subnet, or what the response contains. Incomplete for a mutation tool.

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?

Schema description coverage is 100%, so schema already documents all params. The description adds no extra param semantics beyond implying that IP and subnetId are key identifiers.

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 a specific verb+resource ('Create or update an IP address') and clearly indicates the upsert semantics. It distinguishes from siblings like list/get (read-only) and allocate/release (different operations).

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

Usage Guidelines2/5

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

No guidance on when to use this vs alternatives. The requirement flag PHPIPAM_WRITE_ENABLED=true is a prerequisite, not a selection guideline. No mention of when to prefer this over addresses.allocate or subnets.ensure.

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

phpipam.healthA

Check phpIPAM connectivity and authentication status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears the burden. It accurately describes a read-only health check but does not disclose response format, error behavior, or whether any data is modified. No contradiction, but minimal behavioral context.

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 one short sentence that communicates the tool's purpose without unnecessary words. It earns its place and nothing more.

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?

For a zero-parameter health check, the description is mostly complete. It lacks explicit details about the return value or status output, but this is a minor gap given the tool's simplicity.

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?

There are zero parameters and schema coverage is 100%, so no parameter description is needed. The description fully aligns with the empty schema.

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 states a specific verb ('check') and resource ('phpIPAM') with a clear scope ('connectivity and authentication status'). This clearly distinguishes it from sibling tools that list, get, ensure, allocate, release, or 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?

The description indicates a diagnostic purpose but does not explicitly say when to use this tool (e.g., before other phpIPAM operations) or mention alternatives. It implies usage as a health check but lacks explicit guidance.

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

phpipam.searchA

Search for addresses by IP, hostname, or other criteria

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoType of search (default: all)
queryYesSearch query (IP, hostname, etc.)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention result format, case sensitivity, wildcard support, error handling, or whether this is a read-only operation. The description only states the action without revealing expected behavior beyond the obvious search intent.

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, focused sentence with no wasted words. It front-loads the core purpose immediately, naming both the action and the target resource without any redundant phrasing.

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 simple with only two fully described parameters, and no output schema exists. The description does not explain what a successful search returns (e.g., a list of matching addresses) or any limitations, but the minimal complexity and parameter richness partly compensate. It is borderline adequate but leaves the agent with unknowns about the response structure.

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 covers both parameters with 100% description coverage, providing the baseline of 3. The tool description adds little beyond the schema, only restating that search can be by IP, hostname, or other criteria, which is already captured in the query parameter description. No extra semantic depth is added.

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 a specific verb ('Search') and resource ('addresses'), and lists criteria (IP, hostname, other) that distinguish it from sibling list/get functions. It is a precise statement of what the tool does.

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 gives context that the tool searches by various criteria but does not explicitly compare to alternatives like addresses.list or addresses.get. The usage is implied by the word 'search', but no direct guidance is provided on when to prefer this over sibling tools.

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

phpipam.sections.ensureA

Ensure a section exists (create if missing). Requires PHPIPAM_WRITE_ENABLED=true and PHPIPAM_ALLOW_SECTION_CREATE=true

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSection name
descriptionNoSection description
masterSectionNoParent section ID

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses required environment variables and the core behavior ('create if missing'), but does not clarify behavior when the section already exists (e.g., idempotent no-op), error handling if prerequisites are unmet, or return value. This is partial transparency for a mutation tool.

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 concise sentence that front-loads the main action ('Ensure a section exists') and adds a critical prerequisite. No wasted words; every element contributes to understanding the tool's purpose and usage conditions.

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 simple (3 params, no output schema), but the description omits details like idempotent behavior, response format, or interaction with parent sections. Given the lack of annotations and output schema, a bit more context (e.g., 'returns section ID' or 'no-op if exists') would improve completeness.

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?

Schema description coverage is 100%, with each parameter having a basic description ('Section name', 'Section description', 'Parent section ID'). The tool description adds no extra parameter nuance, so baseline 3 is appropriate. The schema carries the parameter meaning sufficiently.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Ensure a section exists (create if missing).' This clearly indicates the tool's function and distinguishes it from list/get tools, though it does not explicitly mention sibling tools as alternatives. The wording is unambiguous and focuses on creation/verification.

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 section needs to be created if absent, but it does not explicitly state when to use this tool over alternatives like list or get. It provides a prerequisite condition (environment variables) that serves as guidance, but lacks explicit 'when not to use' or alternative recommendations.

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

phpipam.sections.getB

Get a specific section by ID or name

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSection ID
nameNoSection name (alternative to ID)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states the basic action and does not mention what happens if neither id nor name is supplied, if both are provided (precedence), or if no matching section is found. These are important behavioral traits for a get operation that the description leaves unaddressed.

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, front-loaded sentence that conveys the core purpose without redundancy or extraneous detail. Every word serves a purpose, making it optimally concise for an agent to parse.

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

Completeness2/5

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

Despite the tool's simplicity, the description is incomplete for successful invocation. Both parameters are optional in the schema, but the description does not state that at least one of id or name should be provided, nor does it explain the behavior when both are absent. Additionally, there is no output schema, and the description does not indicate what the tool returns (e.g., section object, null, error). These gaps limit the agent's ability to use the tool reliably.

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 input schema already provides complete descriptions for both parameters, including the fact that name is an alternative to ID. The description adds little beyond restating 'by ID or name', and it doesn't clarify parameter precedence or formatting. With 100% schema coverage, the baseline is 3, and the description does not meaningfully elevate above that baseline.

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 'Get a specific section by ID or name' uses a specific verb (Get) and resource (section), and clearly distinguishes itself from sibling tools like sections.list (which lists all sections) and sections.ensure (which creates/updates). The scope is narrowed to retrieval by ID or name, making the tool's purpose unmistakable.

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 this tool is for retrieving a single section when the caller knows its ID or name, but it does not explicitly state when to use it over alternatives like sections.list or sections.ensure. There are no mentions of exclusions, prerequisites, or comparisons to sibling tools, leaving usage guidance implicit rather than explicit.

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

phpipam.sections.listA

List all sections in phpIPAM

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/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 of transparency. 'List all sections' clearly indicates a read-only action, which is transparent enough for a simple no-parameter operation. However, it does not disclose potential behaviors like pagination, empty results, or error conditions, which could be relevant in some scenarios.

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 sentence that is concise and front-loaded with the essential information. Every word contributes to the meaning, and there is no wasted text or 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?

Given the tool's simplicity (no parameters, no output schema, and a straightforward list operation), the description 'List all sections in phpIPAM' provides all necessary context. It clearly states the resource and scope, making it fully self-contained for an agent to select and invoke the tool correctly.

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 input schema has zero parameters, so there is no parameter ambiguity. The baseline for zero-parameter tools is 4, and the description adds no conflicting or extraneous information. It simply states the action, which is sufficient.

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 'List all sections in phpIPAM' uses a specific verb ('list') and resource ('sections'), clearly indicating the tool's function. It distinguishes from sibling tools such as 'sections.get' (which likely fetches a single section) and 'sections.ensure' (which creates/updates), making the 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 Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives. The description only states the action, and while the name 'list' implies a broad listing operation, it does not mention exclusions (e.g., 'use sections.get for a specific section') or provide any comparison to sibling tools.

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

phpipam.subnets.ensureC

Ensure a subnet exists (create if missing). Requires PHPIPAM_WRITE_ENABLED=true and PHPIPAM_ALLOW_SUBNET_CREATE=true

ParametersJSON Schema
NameRequiredDescriptionDefault
cidrYesSubnet in CIDR notation (e.g., 192.168.1.0/24)
vlanIdNoVLAN ID
sectionIdYesSection ID
descriptionNoSubnet description
masterSubnetIdNoParent subnet ID (for nested subnets)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It states this is a write operation and lists required flags, but fails to disclose idempotency, behavior when subnet already exists, return values, or error conditions. Minimal behavioral disclosure.

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 clauses: purpose first, then requirement. No wasted words, well-structured and front-loaded.

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

Completeness2/5

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

For an ensure/write tool with no annotations and no output schema, a one-sentence description is insufficient. It lacks behavior on existing states, return format, and error handling, though prerequisites are included.

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 input schema has 100% coverage with descriptions for all 5 parameters, so the schema already provides parameter meaning. The description adds no parameter-specific details, making baseline 3 appropriate.

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

Purpose4/5

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

The description uses a specific verb 'ensure' with resource 'subnet' and clarifies 'create if missing', making the core purpose clear. It distinguishes from read-only tools like list/get, though it doesn't explicitly differentiate from sections.ensure.

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

Usage Guidelines2/5

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

The description provides prerequisites (environment variables) but offers no guidance on when to use this tool versus alternatives. It does not mention checking existence with get or the relationship with similar ensure tools.

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

phpipam.subnets.getA

Get a specific subnet by ID or CIDR notation

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSubnet ID
cidrNoCIDR notation (e.g., 192.168.1.0/24)

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the action without explaining precedence when both 'id' and 'cidr' are given, behavior when neither is provided, or failure modes. It also does not explicitly confirm this is a read-only operation or describe the return format, which is critical given no output schema.

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, focused sentence that front-loads the verb and resource. No unnecessary words or redundancy. It efficiently conveys the tool's purpose and key parameter distinction.

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, but the description leaves important gaps: it does not indicate that one of 'id' or 'cidr' is required (schema lists them as optional), nor does it describe the return value. With no output schema and no annotations, these omissions make the description less complete for an agent needing to invoke the tool correctly.

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 input schema already provides 100% coverage of parameter descriptions, but the description adds meaningful semantic value by stating 'by ID or CIDR notation', clarifying that 'id' and 'cidr' are alternative identifiers rather than both being required. This simple additional context helps the agent understand the intended parameter relationship beyond the schema.

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 'Get a specific subnet by ID or CIDR notation' clearly states the verb ('Get'), the resource ('subnet'), and the scope ('specific'), which distinguishes it from sibling tools like 'subnets.list' that return multiple subnets. The purpose is unambiguous and immediately actionable.

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 for retrieving a single subnet, contrasted with listing multiple, but it does not explicitly name alternatives or provide exclusions. It also does not state that exactly one of 'id' or 'cidr' should be provided, leaving the parameter selection partially ambiguous. The sibling tool names offer context, but the description itself lacks direct guidance.

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

phpipam.subnets.listA

List all subnets in a section

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionIdYesSection ID

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It states the basic action but does not describe return format, pagination, ordering, whether child subnets are included, or any permissions or side effects. This is minimal 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 a single, concise sentence that immediately states the tool's purpose. It is front-loaded and contains no filler.

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 simple, with one parameter and no output schema. The description adequately conveys the primary purpose but lacks details on return structure or behavior. Given the lack of annotations and output schema, the description is minimally viable but leaves room for interpretation about the exact output.

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 input schema already provides the parameter 'sectionId' with a simple description 'Section ID'. The tool description adds context by clarifying that the section is the scope for listing subnets, but it does not elaborate on the expected value format or any special cases. Given the 100% schema coverage, this is sufficient but not enhanced.

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 a specific verb 'List' with a resource 'subnets' and a clear scope 'in a section'. It distinguishes from sibling tools like subnets.get (which retrieves a specific subnet) and sections.list (which lists sections).

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: to list all subnets within a particular section. However, it does not explicitly state when to use it over alternatives, nor does it mention any limitations or exclusions. There is no direct comparison to sibling tools like subnets.get or addresses.list.

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. 13 tool updatesv0.1.0
    • First observedphpipam.addresses.allocate
    • First observedphpipam.addresses.get
    • First observedphpipam.addresses.list
    • First observedphpipam.addresses.release
    • First observedphpipam.addresses.upsert
    • First observedphpipam.health
    • First observedphpipam.search
    • First observedphpipam.sections.ensure
    • First observedphpipam.sections.get
    • First observedphpipam.sections.list
    • First observedphpipam.subnets.ensure
    • First observedphpipam.subnets.get
    • First observedphpipam.subnets.list

TDQS

A3.5/5.0
Disambiguation4/5

Tools are mostly distinct, with clear resource-action patterns for sections, subnets, and addresses. Minor ambiguity exists between 'search' and 'addresses.get', but descriptions clarify their different use cases.

Naming Consistency4/5

Most tools follow a consistent 'phpipam.<resource>.<action>' pattern. Exceptions include 'phpipam.health' and 'phpipam.search', which omit the resource segment, but the overall style is uniform.

Tool Count5/5

13 tools is well-scoped for an IPAM server, covering health checks, sections, subnets, and addresses without excessive redundancy. Each tool serves a clear purpose within the domain.

Completeness3/5

Address lifecycle is well covered with allocate, release, and upsert, but sections and subnets lack update and delete operations. The ensure tools provide creation, but no way to modify or remove these entities, leaving notable gaps.

Maintenance

ActivityInactive
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/alsamasu/phpipam-mcp'

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