Skip to main content
Glama

search_papers_by_author

Find academic papers published by a specific author, with options to sort by publication year or citation count and browse results in paginated format.

Instructions

Search papers published by a specific author

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
authorYesAuthor name
orderNoSort order: year (by publication year) or n_citation (by citation count)
pageNoPage number, starting from 0
sizeNoNumber of papers per page, maximum 10

Implementation Reference

  • MCP tool handler for 'search_papers_by_author'. Extracts parameters, calls AminerClient.searchByAuthor, formats the result using formatSearchResults, and returns structured MCP response or error content.
    try { const result = await aminerClient.searchByAuthor(author, page, size, order); const formattedResult = aminerClient.formatSearchResults(result); return { content: [{ type: "text", text: JSON.stringify(formattedResult, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: JSON.stringify({ error: "Search failed", message: error instanceof Error ? error.message : 'Unknown error' }, null, 2) }], isError: true }; } } );
  • Zod input schema defining parameters for the search_papers_by_author tool: author (required string), page, size, order.
    author: z.string().describe("Author name"), page: z.number().min(0).default(0).describe("Page number, starting from 0"), size: z.number().min(1).max(10).default(10).describe("Number of papers per page, maximum 10"), order: z.enum(["year", "n_citation"]).optional().describe("Sort order: year (by publication year) or n_citation (by citation count)") } },
  • src/index.ts:114-150 (registration)
    Registration of the 'search_papers_by_author' tool on the MCP server, including title, description, input schema, and handler reference.
    "search_papers_by_author", { title: "Search Papers by Author", description: "Search papers published by a specific author", inputSchema: { author: z.string().describe("Author name"), page: z.number().min(0).default(0).describe("Page number, starting from 0"), size: z.number().min(1).max(10).default(10).describe("Number of papers per page, maximum 10"), order: z.enum(["year", "n_citation"]).optional().describe("Sort order: year (by publication year) or n_citation (by citation count)") } }, async ({ author, page, size, order }) => { try { const result = await aminerClient.searchByAuthor(author, page, size, order); const formattedResult = aminerClient.formatSearchResults(result); return { content: [{ type: "text", text: JSON.stringify(formattedResult, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: JSON.stringify({ error: "Search failed", message: error instanceof Error ? error.message : 'Unknown error' }, null, 2) }], isError: true }; } } );
  • AminerClient helper method specifically for author-based paper search, delegating to the general searchPapers method.
    async searchByAuthor(author: string, page = 0, size = 10, order?: 'year' | 'n_citation'): Promise<SearchResult> { return this.searchPapers({ author, page, size, order }); }
  • Core implementation in AminerClient that performs the actual HTTP request to AMiner API using the provided search parameters (including author), handles response and errors.
    async searchPapers(params: SearchParams): Promise<SearchResult> { // Validate required parameters if (!params.keyword && !params.venue && !params.author) { throw new Error('At least one of keyword, venue, or author must be provided'); } if (params.size > 10) { throw new Error('Size parameter cannot exceed 10'); } // Build query parameters const searchParams = new URLSearchParams(); if (params.keyword) searchParams.append('keyword', params.keyword); if (params.venue) searchParams.append('venue', params.venue); if (params.author) searchParams.append('author', params.author); searchParams.append('page', params.page.toString()); searchParams.append('size', params.size.toString()); if (params.order) searchParams.append('order', params.order); const url = `${this.config.baseUrl}?${searchParams.toString()}`; try { const response = await fetch(url, { method: 'GET', headers: { 'Authorization': this.config.apiKey, 'Content-Type': 'application/json', }, }); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const data = await response.json() as AminerSearchResponse; // Add detailed response data check if (!data) { throw new Error('API returned empty response'); } if (!data.success) { throw new Error(`API Error (${data.code}): ${data.msg}`); } // Check the completeness of the response data if (typeof data.total !== 'number') { console.warn('API response missing or invalid total field, defaulting to 0'); } // Ensure data.data is not null, if it is null, use an empty array const papers = data.data || []; const total = data.total || 0; return { papers, total, page: params.page, size: params.size, hasMore: (params.page + 1) * params.size < total, }; } catch (error) { if (error instanceof Error) { throw new Error(`Failed to search papers: ${error.message}`); } throw new Error('Unknown error occurred while searching papers'); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/scipenai/aminer-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server