Skip to content

Commit e079aac

Browse files
author
Aaditya Bhoota
committed
addressing PR comments
1 parent 4691c1b commit e079aac

File tree

8 files changed

+56
-54
lines changed

8 files changed

+56
-54
lines changed

src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class SearchResult(BaseModel):
2929
class SearchResponse(BaseModel):
3030
"""Complete search response including results and facets."""
3131

32-
searchResults: List[SearchResult]
32+
search_results: List[SearchResult]
3333
facets: Optional[Dict[str, List[str]]] = None
3434
query_id: str
3535

src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server_aws.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ async def search_documentation(
202202
203203
## Result Interpretation
204204
205-
Each result includes:
206-
- searchResults: List of documentation pages, each with:
205+
Each SearchResponse includes:
206+
- search_results: List of documentation pages, each with:
207207
- rank_order: The relevance ranking (lower is more relevant)
208208
- url: The documentation page URL
209209
- title: The page title
@@ -267,7 +267,7 @@ async def search_documentation(
267267
logger.error(error_msg)
268268
await ctx.error(error_msg)
269269
return SearchResponse(
270-
searchResults=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
270+
search_results=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
271271
facets=None,
272272
query_id='',
273273
)
@@ -277,7 +277,7 @@ async def search_documentation(
277277
logger.error(error_msg)
278278
await ctx.error(error_msg)
279279
return SearchResponse(
280-
searchResults=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
280+
search_results=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
281281
facets=None,
282282
query_id='',
283283
)
@@ -301,7 +301,7 @@ async def search_documentation(
301301
logger.error(error_msg)
302302
await ctx.error(error_msg)
303303
return SearchResponse(
304-
searchResults=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
304+
search_results=[SearchResult(rank_order=1, url='', title=error_msg, context=None)],
305305
facets=None,
306306
query_id='',
307307
)
@@ -336,11 +336,11 @@ async def search_documentation(
336336

337337
logger.debug(f'Found {len(results)} search results for: {search_phrase}')
338338
logger.debug(f'Search query ID: {query_id}')
339-
finalSearchResponse = SearchResponse(
340-
searchResults=results, facets=facets if facets else None, query_id=query_id
339+
final_search_response = SearchResponse(
340+
search_results=results, facets=facets if facets else None, query_id=query_id
341341
)
342-
add_search_result_cache_item(finalSearchResponse)
343-
return finalSearchResponse
342+
add_search_result_cache_item(final_search_response)
343+
return final_search_response
344344

345345

346346
@mcp.tool()

src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def get_query_id_from_cache(url: str) -> Optional[str]:
135135
136136
"""
137137
for _, search_responses in enumerate(SEARCH_RESULT_CACHE):
138-
for search_result in search_responses.searchResults:
138+
for search_result in search_responses.search_results:
139139
if search_result.url == url:
140140
# Sanitization of query_id just in case
141141
query_id = quote(search_responses.query_id)

src/aws-documentation-mcp-server/tests/test_aws_search_live.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ async def test_search_documentation_live():
4444
response = await search_documentation(
4545
ctx, search_phrase=search_phrase, limit=5, product_types=None, guide_types=None
4646
)
47-
results = response.searchResults
47+
results = response.search_results
4848
# Verify the results
4949
assert results is not None
5050
assert len(results) > 0
@@ -85,7 +85,7 @@ async def test_search_documentation_empty_results():
8585
response = await search_documentation(
8686
ctx, search_phrase=search_phrase, limit=5, product_types=None, guide_types=None
8787
)
88-
results = response.searchResults
88+
results = response.search_results
8989

9090
# We don't assert on the number of results, as it might change over time
9191
# Just verify that the function returns a valid response
@@ -118,12 +118,12 @@ async def test_search_documentation_limit():
118118
response_small = await search_documentation(
119119
ctx, search_phrase=search_phrase, limit=3, product_types=None, guide_types=None
120120
)
121-
results_small = response_small.searchResults
121+
results_small = response_small.search_results
122122
# Test with limit=10
123123
response_large = await search_documentation(
124124
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
125125
)
126-
results_large = response_large.searchResults
126+
results_large = response_large.search_results
127127

128128
# Verify that the limits are respected
129129
assert len(results_small) <= 3
@@ -152,7 +152,7 @@ async def test_search_documentation_with_product_type():
152152
first_response = await search_documentation(
153153
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
154154
)
155-
first_results = first_response.searchResults
155+
first_results = first_response.search_results
156156
# Verify first search results
157157
assert first_response is not None
158158
assert first_results is not None
@@ -173,12 +173,13 @@ async def test_search_documentation_with_product_type():
173173
product_types=[first_product_type],
174174
guide_types=None,
175175
)
176-
second_results = second_response.searchResults
176+
second_results = second_response.search_results
177177

178178
# Verify second search results
179179
assert second_response is not None
180180
assert second_results is not None
181181
assert len(second_results) > 0
182+
assert first_product_type in second_response.facets['product_types']
182183

183184

184185
@pytest.mark.asyncio
@@ -196,7 +197,7 @@ async def test_search_documentation_with_guide_type():
196197
first_response = await search_documentation(
197198
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
198199
)
199-
first_results = first_response.searchResults
200+
first_results = first_response.search_results
200201
# Verify first search results
201202
assert first_response is not None
202203
assert first_results is not None
@@ -217,12 +218,13 @@ async def test_search_documentation_with_guide_type():
217218
product_types=None,
218219
guide_types=[first_guide_type],
219220
)
220-
second_results = second_response.searchResults
221+
second_results = second_response.search_results
221222

222223
# Verify second search results
223224
assert second_response is not None
224225
assert second_results is not None
225226
assert len(second_results) > 0
227+
assert first_guide_type in second_response.facets['guide_types']
226228

227229

228230
if __name__ == '__main__':

src/aws-documentation-mcp-server/tests/test_metadata_handling.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ async def test_seo_abstract_priority(self):
6161
response = await search_documentation(
6262
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
6363
)
64-
results = response.searchResults
64+
results = response.search_results
6565
assert len(results) == 1
6666
assert results[0].context == 'SEO optimized abstract'
6767

@@ -96,7 +96,7 @@ async def test_abstract_fallback(self):
9696
response = await search_documentation(
9797
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
9898
)
99-
results = response.searchResults
99+
results = response.search_results
100100
assert len(results) == 1
101101
assert results[0].context == 'Regular abstract'
102102

@@ -128,7 +128,7 @@ async def test_summary_fallback(self):
128128
response = await search_documentation(
129129
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
130130
)
131-
results = response.searchResults
131+
results = response.search_results
132132
assert len(results) == 1
133133
assert results[0].context == 'Regular summary'
134134

@@ -159,7 +159,7 @@ async def test_suggestion_body_fallback(self):
159159
response = await search_documentation(
160160
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
161161
)
162-
results = response.searchResults
162+
results = response.search_results
163163
assert len(results) == 1
164164
assert results[0].context == 'Suggestion body text'
165165

@@ -189,7 +189,7 @@ async def test_no_context_available(self):
189189
response = await search_documentation(
190190
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
191191
)
192-
results = response.searchResults
192+
results = response.search_results
193193
assert len(results) == 1
194194
assert results[0].context is None
195195

@@ -220,7 +220,7 @@ async def test_empty_metadata(self):
220220
response = await search_documentation(
221221
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
222222
)
223-
results = response.searchResults
223+
results = response.search_results
224224
assert len(results) == 1
225225
assert results[0].context == 'Regular summary'
226226

@@ -275,7 +275,7 @@ async def test_mixed_metadata_availability(self):
275275
response = await search_documentation(
276276
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
277277
)
278-
results = response.searchResults
278+
results = response.search_results
279279
assert len(results) == 4
280280
assert results[0].context == 'SEO abstract 1'
281281
assert results[1].context == 'Regular abstract 2'
@@ -324,7 +324,7 @@ async def test_real_world_example_with_metadata(self):
324324
response = await search_documentation(
325325
ctx, search_phrase='s3', limit=10, product_types=None, guide_types=None
326326
)
327-
results = response.searchResults
327+
results = response.search_results
328328
assert len(results) == 2
329329
# First result should use seo_abstract
330330
assert (
@@ -361,6 +361,6 @@ async def test_missing_metadata_field(self):
361361
response = await search_documentation(
362362
ctx, search_phrase='test', limit=10, product_types=None, guide_types=None
363363
)
364-
results = response.searchResults
364+
results = response.search_results
365365
assert len(results) == 1
366366
assert results[0].context == 'Regular summary'

src/aws-documentation-mcp-server/tests/test_models.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ def test_search_response_creation(self):
6868
}
6969

7070
response = SearchResponse(
71-
searchResults=search_results, facets=facets, query_id='test-query-id'
71+
search_results=search_results, facets=facets, query_id='test-query-id'
7272
)
7373

74-
assert len(response.searchResults) == 1
75-
assert response.searchResults[0].title == 'Test 1'
74+
assert len(response.search_results) == 1
75+
assert response.search_results[0].title == 'Test 1'
7676
assert response.facets == facets
7777
assert response.query_id == 'test-query-id'
7878

@@ -86,9 +86,9 @@ def test_search_response_without_facets(self):
8686
)
8787
]
8888

89-
response = SearchResponse(searchResults=search_results, query_id='test-query-id')
89+
response = SearchResponse(search_results=search_results, query_id='test-query-id')
9090

91-
assert len(response.searchResults) == 1
91+
assert len(response.search_results) == 1
9292
assert response.facets is None
9393
assert response.query_id == 'test-query-id'
9494

src/aws-documentation-mcp-server/tests/test_server_aws.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ async def test_search_documentation(self):
169169
response = await search_documentation(
170170
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
171171
)
172-
results = response.searchResults
172+
results = response.search_results
173173
assert len(results) == 2
174174
assert results[0].rank_order == 1
175175
assert results[0].url == 'https://docs.aws.amazon.com/test1'
@@ -241,7 +241,7 @@ async def test_search_documentation_with_domain_modification(self):
241241
results = await search_documentation(
242242
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
243243
)
244-
search_results = results.searchResults
244+
search_results = results.search_results
245245
assert len(search_results) == 2
246246
mock_post.assert_called_once()
247247

@@ -273,7 +273,7 @@ async def test_search_documentation_http_error(self):
273273
response = await search_documentation(
274274
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
275275
)
276-
results = response.searchResults
276+
results = response.search_results
277277
assert len(results) == 1
278278
assert results[0].rank_order == 1
279279
assert results[0].url == ''
@@ -295,7 +295,7 @@ async def test_search_documentation_status_error(self):
295295
response = await search_documentation(
296296
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
297297
)
298-
results = response.searchResults
298+
results = response.search_results
299299

300300
assert len(results) == 1
301301
assert results[0].rank_order == 1
@@ -319,7 +319,7 @@ async def test_search_documentation_json_error(self):
319319
response = await search_documentation(
320320
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
321321
)
322-
results = response.searchResults
322+
results = response.search_results
323323

324324
assert len(results) == 1
325325
assert results[0].rank_order == 1
@@ -343,7 +343,7 @@ async def test_search_documentation_empty_results(self):
343343
response = await search_documentation(
344344
ctx, search_phrase=search_phrase, limit=10, product_types=None, guide_types=None
345345
)
346-
results = response.searchResults
346+
results = response.search_results
347347
assert len(results) == 0
348348
mock_post.assert_called_once()
349349

@@ -373,7 +373,8 @@ async def test_search_documentation_with_filters(self):
373373
product_types=['Amazon S3', 'AWS Lambda'],
374374
guide_types=['User Guide', 'API Reference'],
375375
)
376-
context_attrs = mock_post.call_args[1]['json']['contextAttributes']
376+
args, kwargs = mock_post.call_args
377+
context_attrs = kwargs['json']['contextAttributes']
377378
assert {'key': 'aws-docs-search-product', 'value': 'Amazon S3'} in context_attrs
378379
assert {'key': 'aws-docs-search-product', 'value': 'AWS Lambda'} in context_attrs
379380
assert {'key': 'aws-docs-search-guide', 'value': 'User Guide'} in context_attrs
@@ -387,14 +388,16 @@ async def test_search_documentation_with_filters(self):
387388
await search_documentation(
388389
ctx, search_phrase='test', limit=10, product_types=['Amazon S3'], guide_types=None
389390
)
390-
context_attrs = mock_post.call_args[1]['json']['contextAttributes']
391+
args, kwargs = mock_post.call_args
392+
context_attrs = kwargs['json']['contextAttributes']
391393
assert {'key': 'aws-docs-search-product', 'value': 'Amazon S3'} in context_attrs
392394

393395
# Test only guide filter
394396
await search_documentation(
395397
ctx, search_phrase='test', limit=10, product_types=None, guide_types=['User Guide']
396398
)
397-
context_attrs = mock_post.call_args[1]['json']['contextAttributes']
399+
args, kwargs = mock_post.call_args
400+
context_attrs = kwargs['json']['contextAttributes']
398401
assert {'key': 'aws-docs-search-guide', 'value': 'User Guide'} in context_attrs
399402

400403

0 commit comments

Comments
 (0)