Skip to main content
Glama
sms03

Resume Analysis MCP Server

by sms03
resume_analyzer.cpython-313.pyc8.43 kB
� K.<h����SrSSKrSSKrSSKrSSKJrJrJrJr SSK J r SSK J r SSKJrJrJr \R$"\5r"SS5rg)z" Resume analyzer using Google ADK �N)�Dict�List�Any�Optional)�Agent)�RESUME_ANALYSIS_PROMPT�RESUME_JOB_MATCHING_PROMPT�CANDIDATE_RANKING_PROMPTc��\rSrSrSrSrS\4SjrS\S\ \\ 44Sjr S\S\S\ \\ 44S jr S \ \ \\4S\S\ \\ 44S jrS \S\ \\ 44S jrSrg)�ResumeAnalyzer�z Resume analysis using Google ADKc�x�[RRS5nU(d[R S5 O[ R "US9 UR5Ul[RS5 g![a2n[RS[U535 SUlSnAgSnAff=f)zInitialize the resume analyzer�GOOGLE_API_KEYzDGOOGLE_API_KEY not found in environment. Some features may not work.��api_keyz"ADK agent initialized successfullyzError initializing ADK agent: N) �os�environ�get�logger�warning�genai� configure� _setup_agent�agent�info� Exception�error�str)�selfr�es �6D:\GitHub\resume-mcp\src\resume_mcp\resume_analyzer.py�__init__�ResumeAnalyzer.__init__s����*�*�.�.�!1�2��� �N�N�a� b� �O�O�G� ,� ��*�*�,�D�J� �K�K�<� =��� � �L�L�9�#�a�&��B� C��D�J�J�� �s�*A=�= B9�(B4�4B9�returnc�~�[SSS9n[R"[RR SS5S9 U$)zSet up the ADK agent�ResumeAnalysisAgentzCAn agent that analyzes resumes and matches them to job descriptions)�name� descriptionr�r)rrrrrr)rrs r!r�ResumeAnalyzer._setup_agent&s7���&�]� �� ���� � ���/?�� D�E�� �� resume_textc��J# �UR(d [S5e[R"US9nURR U5IShv�N n[ R "UR5nU$N'![ Ra3 [RS5 URUR5s$f=f![aPn[RS[U535 [U5[U5S:�aUSSS-OUS.sSnA$SnAff=f7f) z� Analyze a resume to extract key information Args: resume_text (str): The text content of the resume Returns: Dict[str, Any]: Structured resume information �ADK agent not initialized)r,N�0Response was not valid JSON, extracting manuallyzError analyzing resume: �dz...)rr,)r� RuntimeErrorr�format�generate_content�json�loads�text�JSONDecodeErrorrr�_extract_structured_datarrr�len)rr,�prompt�response�resultr s r!�analyze_resume�ResumeAnalyzer.analyze_resume3s�����z�z��:�;� ;� �+�2�2�{�K�F�"�Z�Z�8�8��@�@�H� D����H�M�M�2��� � A�� �'�'� D����Q�R��4�4�X�]�]�C�C� D�� � � �L�L�3�C��F�8�<� =��Q��<?� �<L�s�<R�{�4�C�0�5�8�Xc�� �� �sl�D#�2C�A:�C�!A<�9D#�:C�<AC�C�D#�C�C� D �AD�D �D#�D � D#�job_descriptionc�� # �UR(d [S5e[R"UUS9nURR U5IShv�N n[ R "UR5nU$N'![ Ra3 [RS5 URUR5s$f=f![a:n[RS[U535 [U5SSS.sSnA$SnAff=f7f) z� Match a resume against a job description Args: resume_text (str): The text content of the resume job_description (str): The job description text Returns: Dict[str, Any]: Match results with scores and explanations r.)r,r?Nr/zError matching resume to job: rzError processing request)r� match_score� explanation)rr1r r2r3r4r5r6r7rrr8rrr)rr,r?r:r;r<r s r!�match_resume_to_job�"ResumeAnalyzer.match_resume_to_jobWs�����z�z��:�;� ;� �/�6�6�'� /��F� "�Z�Z�8�8��@�@�H� D����H�M�M�2��� � A�� �'�'� D����Q�R��4�4�X�]�]�C�C� D�� � � �L�L�9�#�a�&��B� C��Q�� �9�� �� �sk�D�3C�A;�C�!A=�:D�;C�=AC�C�D�C�C� D �/D�D �D�D � D� candidatesc��J# �UR(d [S5e[R"U5n[R "UUS9nURR U5IShv�N n[R"UR5nU$N'![Ra3 [RS5 URUR5s$f=f![a9n[RS[U535 [U5/S.sSnA$SnAff=f7f)z� Rank multiple candidates for a job Args: candidates (List[Dict[str, str]]): List of candidate resume summaries job_description (str): The job description text Returns: Dict[str, Any]: Ranked candidates with scores and explanations r.)rEr?Nr/zError ranking candidates: )r�rankings)rr1r4�dumpsr r2r3r5r6r7rrr8rrr)rrEr?�candidates_jsonr:r;r<r s r!�rank_candidates�ResumeAnalyzer.rank_candidates�s�����z�z��:�;� ;� �"�j�j��4�O�.�4�4�*� /��F� "�Z�Z�8�8��@�@�H� D����H�M�M�2��� � A�� �'�'� D����Q�R��4�4�X�]�]�C�C� D�� � � �L�L�5�c�!�f�X�>� ?��Q���� �� �sl�D#�A C�)B�*C�/!B�D#�C�AC�C�D#�C�C� D �'.D�D �D#�D � D#r6c��0nSSKnURSU5nU(aVUHPn[R"UR 55n[ U[ 5(aURU5 MPMR U(dSU0nU$! Mf=f![a+n[RS[U535 SnANESnAff=f)z� Extract structured data from unstructured text response Args: text (str): Unstructured text response Returns: Dict[str, Any]: Structured data extracted from text rNz```(?:json)?\s*([\s\S]*?)```zError extracting JSON blocks: �raw_text) �re�findallr4r5�strip� isinstance�dict�updaterrrr)rr6�datarN� json_blocks�block�parsedr s r!r8�'ResumeAnalyzer._extract_structured_data�s����� D� ��*�*�%D�d�K�K��(�E��!%���E�K�K�M�!:��%�f�d�3�3� �K�K��/�4�)����%�D�� ������ D� �L�L�9�#�a�&��B� C� C�� D�s/�"B �A B�1B �B �B � C�!B<�<C)rN)�__name__� __module__� __qualname__�__firstlineno__�__doc__r"rrrrrr=rCrrJr8�__static_attributes__�r+r!r r s���*��" �e� �"��"��S�#�X��"�H'�S�'�3�'�SW�X[�]`�X`�Sa�'�R)��T�#�s�(�^�0D�)�WZ�)�_c�dg�il�dl�_m�)�V"�S�"�T�#�s�(�^�"r+r )r]r�loggingr4�typingrrrr�google.generativeai� generativeair�google.adk.agents.llm_agentr�resume_mcp.promptsrr r � getLoggerrYrr r_r+r!�<module>rgsI��� �� �,�,�#�-��� � � �8� $��{�{r+

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/sms03/resume-mcp'

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