Skip to content

Commit c36d5e5

Browse files
committed
modify search to fix claude issues
1 parent fb9e22e commit c36d5e5

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

src/planet_mcp/servers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from . import sdk
22
from . import tiles
3+
from . import search
34

45
all = [
56
sdk,
67
tiles,
8+
search,
79
]

src/planet_mcp/servers/sdk.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import planet
1111
from typing import Union
1212

13-
1413
# tools we don't want enabled at all.
1514
# they simply don't work well in an AI context.
1615
_DEFAULT_IGNORE = {
@@ -19,6 +18,7 @@
1918
"data_get_search",
2019
"data_get_stats",
2120
"data_list_searches",
21+
"data_search",
2222
"data_update_search",
2323
"data_wait_asset",
2424
"destinations_patch_destination",
@@ -35,7 +35,6 @@
3535
TOOL_SIG_OVERRIDE = {
3636
"features_add_items",
3737
"data_get_item_coverage",
38-
"data_search",
3938
"mosaics_download_quad",
4039
"mosaics_download_quads",
4140
"mosaics_get_quad",

src/planet_mcp/servers/search.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from datetime import datetime
2+
3+
from fastmcp import FastMCP
4+
from planet import Planet
5+
from planet_mcp import models
6+
from planet_mcp.servers import descriptions
7+
8+
# technically not using the sdk to make the tool but we can add it to that
9+
10+
mcp = FastMCP("search")
11+
12+
13+
@mcp.tool(
14+
name="data_search",
15+
description=descriptions.overrides["data_search"],
16+
tags={"data"},
17+
enabled=True,
18+
)
19+
async def data_search(
20+
item_types: list[str],
21+
start_date: str,
22+
end_date: str,
23+
geometry: models.Geometry,
24+
):
25+
26+
planet = Planet()
27+
start_dt = datetime.fromisoformat(start_date.replace("Z", "+00:00"))
28+
end_dt = datetime.fromisoformat(end_date.replace("Z", "+00:00"))
29+
datefilter = {
30+
"type": "DateRangeFilter",
31+
"field_name": "acquired",
32+
"config": {"gte": start_dt.isoformat(), "lte": end_dt.isoformat()},
33+
}
34+
cloud_filter = {
35+
"type": "RangeFilter",
36+
"field_name": "cloud_cover",
37+
"config": {"lte": 0.2},
38+
}
39+
filter = {
40+
"type": "AndFilter",
41+
"config": [datefilter, cloud_filter],
42+
}
43+
return planet.data.search(
44+
item_types=item_types,
45+
geometry=dict(geometry),
46+
search_filter=filter,
47+
)

0 commit comments

Comments
 (0)