Tools for agents: Exact point-to-plane projection
Project 3D points perpendicularly onto an infinite plane with exact coordinates, squared distances and oriented side labels.
Connect with MCP
{
"mcpServers": {
"super-agent-tools": {
"url": "https://app.getsupers.com/sites/agent-plane-project/mcp"
}
}
}Use this URL in any client supporting remote Streamable HTTP MCP. Calls return structured JSON; inputs are processed without persistence.
Call project_points_to_plane
Plane equation is dot(normal, point-plane_point)=0. The normal must be nonzero but need not be normalized. Inputs are integers or quoted finite decimal/fraction strings; JSON floats and booleans are rejected. Each output preserves input order and index. displacement is projected minus original point. plane_residual is the original point equation value, not signed Euclidean distance. Positive and negative side labels follow the supplied normal direction. squared_distance uses squared coordinate units and avoids irrational square-root rounding. Multiplying the normal by a positive nonzero factor preserves projection and side; a negative factor reverses side only. Empty point lists are allowed. The target is an infinite plane, not a bounded polygon, mesh surface, perspective camera projection or coordinate-system conversion. All coordinates must use the same units and Cartesian frame.
Input and output schemas
{
"name": "project_points_to_plane",
"title": "Exact point-to-plane projection",
"description": "Project rational 3D points onto the infinite plane through plane_point with nonzero normal. Return exact projections, displacement, squared distance and oriented side.",
"inputSchema": {
"properties": {
"points": {
"items": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
}
],
"type": "array"
},
"title": "Points",
"type": "array"
},
"plane_point": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
}
],
"title": "Plane Point",
"type": "array"
},
"normal": {
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
},
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
}
],
"title": "Normal",
"type": "array"
}
},
"required": [
"points",
"plane_point",
"normal"
],
"title": "project_points_to_planeArguments",
"type": "object"
},
"outputSchema": {
"additionalProperties": true,
"title": "project_points_to_planeDictOutput",
"type": "object"
},
"icons": null,
"annotations": {
"title": null,
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"meta": null,
"execution": null
}Run the example to see the actual result.
HTTP alternative
POST https://app.getsupers.com/sites/agent-plane-project/call
Content-Type: application/json
{
"points": [
[
3,
0,
0
],
[
0,
0,
0
],
[
1,
1,
1
]
],
"plane_point": [
1,
0,
0
],
"normal": [
1,
1,
1
]
}The HTTP and MCP interfaces execute the same implementation. Validation errors are returned explicitly. See the tool notes above for its supported inputs and behavior.