Skip to content

Commit f3fa18a

Browse files
Change logging
1 parent c35f375 commit f3fa18a

19 files changed

+441
-826
lines changed

README.md

-5
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,12 @@ const apodResult = await client.request({
297297
method: "nasa/apod",
298298
params: {}
299299
});
300-
console.log(apodResult.result);
301300

302301
// Example: Get Mars Rover photos
303302
const marsRoverResult = await client.request({
304303
method: "nasa/mars-rover",
305304
params: { rover: "curiosity", sol: 1000 }
306305
});
307-
console.log(marsRoverResult.result);
308306

309307
// Example: Search for Near Earth Objects
310308
const neoResults = await client.request({
@@ -314,7 +312,6 @@ const neoResults = await client.request({
314312
end_date: '2023-01-07'
315313
}
316314
});
317-
console.log(neoResults.result);
318315

319316
// Example: Get satellite imagery from GIBS
320317
const satelliteImage = await client.request({
@@ -324,7 +321,6 @@ const satelliteImage = await client.request({
324321
date: '2023-01-01'
325322
}
326323
});
327-
console.log(satelliteImage.result);
328324

329325
// Example: Use the new POWER API
330326
const powerData = await client.request({
@@ -338,7 +334,6 @@ const powerData = await client.request({
338334
end: "20220107"
339335
}
340336
});
341-
console.log(powerData.result);
342337
```
343338

344339
## Contributing

package.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "nasa-mcp-server",
3-
"version": "1.0.0",
2+
"name": "@programcomputer/nasa-mcp-server",
3+
"version": "1.0.2",
44
"description": "Model Context Protocol (MCP) server for NASA APIs",
55
"main": "dist/index.js",
66
"files": [
@@ -19,7 +19,9 @@
1919
"test": "jest",
2020
"direct-test": "ts-node src/tests/direct-api-test.ts",
2121
"custom-test": "ts-node src/tests/custom-client/nasa-mcp-test.ts",
22-
"simple-test": "ts-node src/tests/custom-client/simple-test.ts"
22+
"simple-test": "ts-node src/tests/custom-client/simple-test.ts",
23+
"test:apod-sse": "ts-node src/tests/custom-client/nasa-apod-sse-test.ts",
24+
"test:apod-sse-esm": "node src/tests/custom-client/nasa-apod-sse-test.mjs"
2325
},
2426
"keywords": [
2527
"nasa",

src/handlers/jpl/fireball.ts

+15-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const fireballParamsSchema = z.object({
2626
export type FireballParams = z.infer<typeof fireballParamsSchema>;
2727

2828
/**
29-
* Handle requests for JPL's Fireball Database
29+
* Make a request to NASA JPL's Fireball API
3030
*/
3131
export async function jplFireballHandler(params: FireballParams) {
3232
try {
@@ -36,14 +36,22 @@ export async function jplFireballHandler(params: FireballParams) {
3636
// Make the request to the Fireball API
3737
const response = await axios.get(url, { params });
3838

39-
return response.data;
39+
return {
40+
content: [{
41+
type: "text",
42+
text: `Retrieved ${response.data.count || 0} fireball events.`
43+
}],
44+
isError: false
45+
};
4046
} catch (error: any) {
4147
console.error('Error in JPL Fireball handler:', error);
4248

43-
if (error.name === 'ZodError') {
44-
throw new Error(`Invalid request parameters: ${error.message}`);
45-
}
46-
47-
throw new Error(`API error: ${error.message}`);
49+
return {
50+
isError: true,
51+
content: [{
52+
type: "text",
53+
text: `Error: ${error.message || 'An unexpected error occurred'}`
54+
}]
55+
};
4856
}
4957
}

src/handlers/jpl/sbdb.ts

+15-6
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,23 @@ export async function jplSbdbHandler(params: SbdbParams) {
6161
// Make the request to SBDB API
6262
const response = await axios.get(url, { params: queryParams });
6363

64-
return response.data;
64+
// Return the response
65+
return {
66+
content: [{
67+
type: "text",
68+
text: `Retrieved data for small body "${params.sstr}".`
69+
}],
70+
isError: false
71+
};
6572
} catch (error: any) {
6673
console.error('Error in JPL SBDB handler:', error);
6774

68-
if (error.name === 'ZodError') {
69-
throw new Error(`Invalid request parameters: ${error.message}`);
70-
}
71-
72-
throw new Error(`API error: ${error.message}`);
75+
return {
76+
isError: true,
77+
content: [{
78+
type: "text",
79+
text: `Error: ${error.message || 'An unexpected error occurred'}`
80+
}]
81+
};
7382
}
7483
}

src/handlers/jpl/scout.ts

+18-24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { z } from 'zod';
22
import { jplApiRequest } from '../../utils/api-client';
33
import { ScoutParams } from '../setup';
4+
import axios from 'axios';
45

56
/**
67
* Handle requests for JPL's Scout API
@@ -9,33 +10,26 @@ import { ScoutParams } from '../setup';
910
*/
1011
export async function jplScoutHandler(params: ScoutParams) {
1112
try {
12-
// By default, get the most recent data if no specific parameters are provided
13-
const endpoint = '/scout.api';
13+
// Call the Scout API
14+
const base_url = 'https://ssd-api.jpl.nasa.gov/scout.api';
15+
const response = await axios.get(base_url, { params });
1416

15-
// Call the JPL Scout API
16-
const result = await jplApiRequest(endpoint, params);
17-
18-
// Return the result
19-
return { result };
17+
return {
18+
content: [{
19+
type: "text",
20+
text: `Retrieved Scout data for object ${params.orbit_id || params.tdes || 'latest'}.`
21+
}],
22+
isError: false
23+
};
2024
} catch (error: any) {
21-
console.error('Error in Scout handler:', error);
22-
23-
if (error.name === 'ZodError') {
24-
throw {
25-
error: {
26-
type: 'invalid_request',
27-
message: 'Invalid request parameters',
28-
details: error.errors
29-
}
30-
};
31-
}
25+
console.error('Error in JPL Scout handler:', error);
3226

33-
throw {
34-
error: {
35-
type: 'server_error',
36-
message: error.message || 'An unexpected error occurred',
37-
details: error.response?.data || null
38-
}
27+
return {
28+
isError: true,
29+
content: [{
30+
type: "text",
31+
text: `Error: ${error.message || 'An unexpected error occurred'}`
32+
}]
3933
};
4034
}
4135
}

src/handlers/nasa/cmr.ts

+6-21
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,6 @@ export async function nasaCmrHandler(params: CmrParams) {
117117
queryParams.include_facets = 'v2';
118118
}
119119

120-
console.log(`Searching CMR: ${CMR_API_BASE_URL}${endpoint} with params:`, queryParams);
121-
122120
// Make the request to CMR directly
123121
const response = await axios({
124122
url: `${CMR_API_BASE_URL}${endpoint}`,
@@ -211,26 +209,13 @@ export async function nasaCmrHandler(params: CmrParams) {
211209
} catch (error: any) {
212210
console.error('Error in CMR handler:', error);
213211

214-
if (error.name === 'ZodError') {
215-
return {
216-
content: [
217-
{
218-
type: "text",
219-
text: `Invalid CMR request parameters: ${error.message}`
220-
}
221-
],
222-
isError: true
223-
};
224-
}
225-
212+
// Proper error handling with isError flag
226213
return {
227-
content: [
228-
{
229-
type: "text",
230-
text: `Error searching NASA Common Metadata Repository: ${error.message || 'Unknown error'}`
231-
}
232-
],
233-
isError: true
214+
isError: true,
215+
content: [{
216+
type: "text",
217+
text: `Error searching NASA Common Metadata Repository: ${error.message || 'Unknown error'}`
218+
}]
234219
};
235220
}
236221
}

src/handlers/nasa/donki.ts

+13-17
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,22 @@ export async function nasaDonkiHandler(params: DonkiParams) {
4949
});
5050

5151
// Return the result
52-
return { result };
52+
return {
53+
content: [{
54+
type: "text",
55+
text: `Retrieved DONKI ${type.toUpperCase()} space weather data${startDate ? ` from ${startDate}` : ''}${endDate ? ` to ${endDate}` : ''}.`
56+
}],
57+
isError: false
58+
};
5359
} catch (error: any) {
5460
console.error('Error in DONKI handler:', error);
5561

56-
if (error.name === 'ZodError') {
57-
throw {
58-
error: {
59-
type: 'invalid_request',
60-
message: 'Invalid request parameters',
61-
details: error.errors
62-
}
63-
};
64-
}
65-
66-
throw {
67-
error: {
68-
type: 'server_error',
69-
message: error.message || 'An unexpected error occurred',
70-
details: error.response?.data || null
71-
}
62+
return {
63+
isError: true,
64+
content: [{
65+
type: "text",
66+
text: `Error: ${error.message || 'An unexpected error occurred'}`
67+
}]
7268
};
7369
}
7470
}

src/handlers/nasa/eonet.ts

+18-21
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ export async function nasaEonetHandler(params: EonetParams) {
4343

4444
// If we don't have any events, try again with broader parameters
4545
if (!response.data.events || response.data.events.length === 0) {
46-
console.log('No EONET events found with current parameters, trying with broader criteria');
47-
4846
// Reset to the main events endpoint for maximum results
4947
endpointPath = '/v3/events';
5048

@@ -69,8 +67,11 @@ export async function nasaEonetHandler(params: EonetParams) {
6967
});
7068

7169
return {
72-
result: broadResponse.data,
73-
note: 'Used broader search criteria due to no events found with original parameters'
70+
content: [{
71+
type: "text",
72+
text: `Used broader search criteria due to no events found with original parameters. Found ${broadResponse.data.events?.length || 0} events.`
73+
}],
74+
isError: false
7475
};
7576
}
7677

@@ -88,26 +89,22 @@ export async function nasaEonetHandler(params: EonetParams) {
8889
});
8990

9091
// Return the original result
91-
return { result: response.data };
92+
return {
93+
content: [{
94+
type: "text",
95+
text: `Found ${response.data.events?.length || 0} EONET events.`
96+
}],
97+
isError: false
98+
};
9299
} catch (error: any) {
93100
console.error('Error in EONET handler:', error);
94101

95-
if (error.name === 'ZodError') {
96-
throw {
97-
error: {
98-
type: 'invalid_request',
99-
message: 'Invalid request parameters',
100-
details: error.errors
101-
}
102-
};
103-
}
104-
105-
throw {
106-
error: {
107-
type: 'server_error',
108-
message: error.message || 'An unexpected error occurred',
109-
details: error.response?.data || null
110-
}
102+
return {
103+
isError: true,
104+
content: [{
105+
type: "text",
106+
text: `Error: ${error.message || 'An unexpected error occurred'}`
107+
}]
111108
};
112109
}
113110
}

src/handlers/nasa/epic.ts

-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ export async function nasaEpicHandler(params: EpicParams) {
9191
endpoint += `/date/${date}`;
9292
}
9393

94-
console.log(`Fetching EPIC data from: ${EPIC_API_BASE_URL}${endpoint}`);
95-
9694
// Try to fetch EPIC data with timeout of 30 seconds
9795
const response = await axios.get(`${EPIC_API_BASE_URL}${endpoint}`, {
9896
timeout: 30000

src/handlers/nasa/exoplanet.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,15 @@ export async function nasaExoplanetHandler(params: ExoplanetParams) {
8282
};
8383
}
8484
} catch (error: any) {
85-
console.error('Error in Exoplanet Archive handler:', error);
85+
console.error('Error in Exoplanet handler:', error);
8686

87-
if (error.name === 'ZodError') {
88-
throw new Error(`Invalid request parameters: ${error.message}`);
89-
}
90-
91-
throw new Error(`API error: ${error.message}`);
87+
return {
88+
isError: true,
89+
content: [{
90+
type: "text",
91+
text: `Error accessing NASA Exoplanet Archive: ${error.message || 'Unknown error'}`
92+
}]
93+
};
9294
}
9395
}
9496

0 commit comments

Comments
 (0)