Javadoc — 18 Operations for AI Agents

Javadoc is the contract documentation of the Java ecosystem — the API promises embedded beside the code. act101 navigates doc comments structurally, so agents verify what an API claims against what it does, in place.

This page is the canonical reference an AI coding agent uses to refactor, query, and analyze Javadoc code through the act MCP server. 18 operations available: 0 refactor, 18 query, 0 analysis. Each operation is callable from Claude Code, Cursor, Codex, OpenCode, or any MCP-compatible agent host. Click any operation for a stable anchor link suitable for citation.

18Query

Worked Javadoc examples

act101 reads a Javadoc comment's block and inline tags — @param, @return, @throws, {@code}, {@link}, and the rest — as its declarations: each tag surfaces in the skeleton as a tag, named for the tag itself, except where the tag's own required subject stands in for it, such as @throws naming the exception type it documents. symbols adds the identifier each @param and @serialField tag names, such as a parameter's own name, as a further entry alongside the tags. The unit of structure in this grammar is the tag, not the method or class the comment documents — act101 never sees the Java declaration a Javadoc block is attached to, only the comment's own tag structure. Each example below is the verbatim output of the command shown, run against the file shown. Query outputs are pretty-printed with the timing block omitted.

Read a comment block's tags without the prose around them

tracking.javadoc is three doc comments for a shipment-tracking API: one documents a location lookup with @param, @return, and @throws; the others document a delivery-estimate method and an exception class.

$ act query skeleton tracking.javadoc

Before

/**
 * Resolves a shipment's current location from carrier tracking events.
 *
 * @param trackingNumber the carrier-issued tracking identifier
 * @param carrier the carrier code, such as {@code UPS} or {@code DHL}
 * @return the most recent known location, or {@code null} if unresolved
 * @throws CarrierTimeoutException if the carrier API does not respond
 */

/**
 * Computes the estimated delivery window for a shipment already in transit.
 *
 * @param shipment the shipment to estimate
 * @return an {@link EstimateWindow} spanning the earliest and latest delivery
 * @since 2.1
 */

/**
 * Thrown when a carrier's tracking API cannot be reached within the
 * configured timeout.
 *
 * @author freight-integrations team
 */

Output

{
    "type": "Skeleton",
    "declarations": [
        {
            "kind": "tag",
            "name": "@param",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 4,
                    "byte_offset": 82
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 64,
                    "byte_offset": 142
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 4,
                    "byte_offset": 82
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 10,
                    "byte_offset": 88
                }
            }
        },
        {
            "kind": "tag",
            "name": "@param",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 4,
                    "byte_offset": 146
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 71,
                    "byte_offset": 213
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 4,
                    "byte_offset": 146
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 10,
                    "byte_offset": 152
                }
            }
        },
        {
            "kind": "tag",
            "name": "@code",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 46,
                    "byte_offset": 188
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 55,
                    "byte_offset": 197
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 46,
                    "byte_offset": 188
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 51,
                    "byte_offset": 193
                }
            }
        },
        {
            "kind": "tag",
            "name": "@code",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 61,
                    "byte_offset": 203
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 70,
                    "byte_offset": 212
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 61,
                    "byte_offset": 203
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 66,
                    "byte_offset": 208
                }
            }
        },
        {
            "kind": "tag",
            "name": "@return",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 4,
                    "byte_offset": 217
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 73,
                    "byte_offset": 286
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 4,
                    "byte_offset": 217
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 11,
                    "byte_offset": 224
                }
            }
        },
        {
            "kind": "tag",
            "name": "@code",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 48,
                    "byte_offset": 261
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 58,
                    "byte_offset": 271
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 48,
                    "byte_offset": 261
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 53,
                    "byte_offset": 266
                }
            }
        },
        {
            "kind": "tag",
            "name": "CarrierTimeoutException",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 4,
                    "byte_offset": 290
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 71,
                    "byte_offset": 357
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 11,
                    "byte_offset": 297
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 35,
                    "byte_offset": 321
                }
            }
        },
        {
            "kind": "tag",
            "name": "@param",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 4,
                    "byte_offset": 450
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 44,
                    "byte_offset": 490
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 4,
                    "byte_offset": 450
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 10,
                    "byte_offset": 456
                }
            }
        },
        {
            "kind": "tag",
            "name": "@return",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 4,
                    "byte_offset": 494
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 79,
                    "byte_offset": 569
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 4,
                    "byte_offset": 494
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 11,
                    "byte_offset": 501
                }
            }
        },
        {
            "kind": "tag",
            "name": "@link",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 16,
                    "byte_offset": 506
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 36,
                    "byte_offset": 526
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 16,
                    "byte_offset": 506
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 21,
                    "byte_offset": 511
                }
            }
        },
        {
            "kind": "tag",
            "name": "@since",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 4,
                    "byte_offset": 573
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 14,
                    "byte_offset": 583
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 4,
                    "byte_offset": 573
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 10,
                    "byte_offset": 579
                }
            }
        },
        {
            "kind": "tag",
            "name": "@author",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 4,
                    "byte_offset": 691
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 37,
                    "byte_offset": 724
                }
            },
            "name_range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 4,
                    "byte_offset": 691
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 11,
                    "byte_offset": 698
                }
            }
        }
    ]
}

The skeleton reports twelve tags: seven from the first comment — two @param, three @code, one @return, and @throws named for CarrierTimeoutException rather than the tag word itself — four from the second comment (@param, @return, @link, @since), and @author from the third.

List tag names alongside the identifiers they document

The first comment's @param tags name two parameters, trackingNumber and carrier; the second comment's @param tag names a third, shipment.

$ act query symbols tracking.javadoc

Before

/**
 * Resolves a shipment's current location from carrier tracking events.
 *
 * @param trackingNumber the carrier-issued tracking identifier
 * @param carrier the carrier code, such as {@code UPS} or {@code DHL}
 * @return the most recent known location, or {@code null} if unresolved
 * @throws CarrierTimeoutException if the carrier API does not respond
 */

/**
 * Computes the estimated delivery window for a shipment already in transit.
 *
 * @param shipment the shipment to estimate
 * @return an {@link EstimateWindow} spanning the earliest and latest delivery
 * @since 2.1
 */

/**
 * Thrown when a carrier's tracking API cannot be reached within the
 * configured timeout.
 *
 * @author freight-integrations team
 */

Output

{
    "type": "Symbols",
    "symbols": [
        {
            "name": "@param",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 4,
                    "byte_offset": 82
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 10,
                    "byte_offset": 88
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "trackingNumber",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 11,
                    "byte_offset": 89
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 4,
                    "column": 25,
                    "byte_offset": 103
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@param",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 4,
                    "byte_offset": 146
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 10,
                    "byte_offset": 152
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "carrier",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 11,
                    "byte_offset": 153
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 18,
                    "byte_offset": 160
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@code",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 46,
                    "byte_offset": 188
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 51,
                    "byte_offset": 193
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@code",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 61,
                    "byte_offset": 203
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 5,
                    "column": 66,
                    "byte_offset": 208
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@return",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 4,
                    "byte_offset": 217
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 11,
                    "byte_offset": 224
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@code",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 48,
                    "byte_offset": 261
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 6,
                    "column": 53,
                    "byte_offset": 266
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@throws",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 4,
                    "byte_offset": 290
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 7,
                    "column": 11,
                    "byte_offset": 297
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@param",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 4,
                    "byte_offset": 450
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 10,
                    "byte_offset": 456
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "shipment",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 11,
                    "byte_offset": 457
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 13,
                    "column": 19,
                    "byte_offset": 465
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@return",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 4,
                    "byte_offset": 494
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 11,
                    "byte_offset": 501
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@link",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 16,
                    "byte_offset": 506
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 14,
                    "column": 21,
                    "byte_offset": 511
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@since",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 4,
                    "byte_offset": 573
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 15,
                    "column": 10,
                    "byte_offset": 579
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "@author",
            "kind": "unknown",
            "range": {
                "start": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 4,
                    "byte_offset": 691
                },
                "end": {
                    "file": "tracking.javadoc",
                    "line": 22,
                    "column": 11,
                    "byte_offset": 698
                }
            },
            "visibility": "unknown"
        }
    ],
    "parse_error": true
}

symbols lists the same tags plus the parameter identifiers trackingNumber, carrier, and shipment as their own entries, all reported with kind: unknown since neither a tag nor a parameter name maps to one of act101's semantic kinds.

Query

18 query tools, the same on every supported language. Descriptions live in the shared reference: /docs/query-tools.

callers control_flow data_flow definition diagnostics effect_closure effect_summary fix_auto get_type graph import_organize interface mutations references repo_outline skeleton symbols symbols_batch

← JavaJavaScript →