everyrow 0.1.8__tar.gz → 0.1.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. {everyrow-0.1.8 → everyrow-0.1.10}/.claude-plugin/marketplace.json +1 -1
  2. {everyrow-0.1.8 → everyrow-0.1.10}/.claude-plugin/plugin.json +1 -1
  3. everyrow-0.1.10/.github/workflows/publish.yaml +56 -0
  4. {everyrow-0.1.8 → everyrow-0.1.10}/.gitignore +6 -0
  5. {everyrow-0.1.8 → everyrow-0.1.10}/PKG-INFO +1 -1
  6. everyrow-0.1.10/everyrow-mcp/.mcpbignore +13 -0
  7. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/README.md +13 -1
  8. everyrow-0.1.10/everyrow-mcp/manifest.json +70 -0
  9. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/pyproject.toml +1 -1
  10. everyrow-0.1.10/everyrow-mcp/server.json +33 -0
  11. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/server.py +9 -1
  12. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/uv.lock +3 -3
  13. {everyrow-0.1.8 → everyrow-0.1.10}/gemini-extension.json +1 -1
  14. {everyrow-0.1.8 → everyrow-0.1.10}/pyproject.toml +2 -1
  15. {everyrow-0.1.8 → everyrow-0.1.10}/tests/test_version.py +41 -1
  16. {everyrow-0.1.8 → everyrow-0.1.10}/uv.lock +3 -1
  17. everyrow-0.1.8/.github/workflows/publish.yaml +0 -31
  18. {everyrow-0.1.8 → everyrow-0.1.10}/.env.example +0 -0
  19. {everyrow-0.1.8 → everyrow-0.1.10}/.gitattributes +0 -0
  20. {everyrow-0.1.8 → everyrow-0.1.10}/.github/workflows/ci.yaml +0 -0
  21. {everyrow-0.1.8 → everyrow-0.1.10}/.github/workflows/skill-version-check.yaml +0 -0
  22. {everyrow-0.1.8 → everyrow-0.1.10}/LICENSE.txt +0 -0
  23. {everyrow-0.1.8 → everyrow-0.1.10}/README.md +0 -0
  24. {everyrow-0.1.8 → everyrow-0.1.10}/docs/add-column-web-lookup.md +0 -0
  25. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/basic-usage/notebook.ipynb +0 -0
  26. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/dedupe-crm-company-records/notebook.ipynb +0 -0
  27. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/dedupe-researchers-across-career-changes/notebook.ipynb +0 -0
  28. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/match-software-vendors-to-requirements/notebook.ipynb +0 -0
  29. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-contacts-with-company-data/notebook.ipynb +0 -0
  30. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-overlapping-contact-lists/notebook.ipynb +0 -0
  31. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/multi-stage-lead-qualification/notebook.ipynb +0 -0
  32. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/research-and-rank-permit-times/notebook.ipynb +0 -0
  33. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-from-fragmented-data/notebook.ipynb +0 -0
  34. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-without-crm-history/notebook.ipynb +0 -0
  35. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-job-postings-by-criteria/notebook.ipynb +0 -0
  36. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-stocks-by-investment-thesis/notebook.ipynb +0 -0
  37. {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-stocks-by-margin-sensitivity/notebook.ipynb +0 -0
  38. {everyrow-0.1.8 → everyrow-0.1.10}/docs/classify-dataframe-rows-llm.md +0 -0
  39. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/S&P 500 Companies.csv +0 -0
  40. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/b2b_companies.csv +0 -0
  41. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/case_01_crm_data.csv +0 -0
  42. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/companies.csv +0 -0
  43. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/company_info.csv +0 -0
  44. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/contacts_list_a.csv +0 -0
  45. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/contacts_list_b.csv +0 -0
  46. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_contacts.csv +0 -0
  47. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_funds.csv +0 -0
  48. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_ready_contacts.csv +0 -0
  49. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/hn_jobs.csv +0 -0
  50. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/investment_firms.csv +0 -0
  51. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/investment_funds.csv +0 -0
  52. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/job_postings.csv +0 -0
  53. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/oil_price_margin_screen_results.csv +0 -0
  54. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/qualified_leads.csv +0 -0
  55. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/researchers.csv +0 -0
  56. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/saas_products.csv +0 -0
  57. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/texas_cities.csv +0 -0
  58. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/thematic_screen_results.csv +0 -0
  59. {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/valuations.csv +0 -0
  60. {everyrow-0.1.8 → everyrow-0.1.10}/docs/deduplicate-training-data-ml.md +0 -0
  61. {everyrow-0.1.8 → everyrow-0.1.10}/docs/filter-dataframe-with-llm.md +0 -0
  62. {everyrow-0.1.8 → everyrow-0.1.10}/docs/fuzzy-join-without-keys.md +0 -0
  63. {everyrow-0.1.8 → everyrow-0.1.10}/docs/rank-by-external-metric.md +0 -0
  64. {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/AGENT.md +0 -0
  65. {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/DEDUPE.md +0 -0
  66. {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/MERGE.md +0 -0
  67. {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/RANK.md +0 -0
  68. {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/SCREEN.md +0 -0
  69. {everyrow-0.1.8 → everyrow-0.1.10}/docs/resolve-entities-python.md +0 -0
  70. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/__init__.py +0 -0
  71. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/utils.py +0 -0
  72. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/__init__.py +0 -0
  73. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/conftest.py +0 -0
  74. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_integration.py +0 -0
  75. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_server.py +0 -0
  76. {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_utils.py +0 -0
  77. {everyrow-0.1.8 → everyrow-0.1.10}/generate_openapi.sh +0 -0
  78. {everyrow-0.1.8 → everyrow-0.1.10}/images/future-search-logo-128.webp +0 -0
  79. {everyrow-0.1.8 → everyrow-0.1.10}/lefthook.yml +0 -0
  80. {everyrow-0.1.8 → everyrow-0.1.10}/openapi-python-client.yaml +0 -0
  81. {everyrow-0.1.8 → everyrow-0.1.10}/skills/everyrow-sdk/SKILL.md +0 -0
  82. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/__init__.py +0 -0
  83. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/api_utils.py +0 -0
  84. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/citations.py +0 -0
  85. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/constants.py +0 -0
  86. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/__init__.py +0 -0
  87. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/__init__.py +0 -0
  88. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/__init__.py +0 -0
  89. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/continue_task_endpoint_tasks_continue_post.py +0 -0
  90. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/copy_artifacts_artifacts_copy_post.py +0 -0
  91. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/copy_workflow_endpoint_workflows_copy_post.py +0 -0
  92. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_api_key_endpoint_api_keys_create_post.py +0 -0
  93. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_session_endpoint_sessions_create_post.py +0 -0
  94. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_workflow_from_artifact_workflows_from_artifact_post.py +0 -0
  95. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/export_to_google_sheets_export_post.py +0 -0
  96. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/generate_feedback_endpoint_tasks_generate_feedback_post.py +0 -0
  97. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_artifacts_artifacts_get.py +0 -0
  98. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_default_timeout_seconds_models_default_timeout_seconds_get.py +0 -0
  99. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_job_progress_for_task_jobs_progress_get.py +0 -0
  100. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_metrics_metrics_get.py +0 -0
  101. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_queues_stats_jobs_queues_get.py +0 -0
  102. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_task_status_endpoint_tasks_task_id_status_get.py +0 -0
  103. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_user_usage_usage_get.py +0 -0
  104. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/healthz_healthz_get.py +0 -0
  105. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/import_from_google_sheets_import_post.py +0 -0
  106. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/interrupt_chat_task_tasks_chat_interrupt_post.py +0 -0
  107. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/list_api_keys_endpoint_api_keys_get.py +0 -0
  108. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/re_execute_task_endpoint_tasks_re_execute_post.py +0 -0
  109. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/revoke_api_key_endpoint_api_keys_key_id_revoke_post.py +0 -0
  110. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/revoke_jobs_for_task_jobs_revoke_post.py +0 -0
  111. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/rollback_to_message_endpoint_tasks_chat_rollback_post.py +0 -0
  112. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/submit_chat_task_tasks_chat_post.py +0 -0
  113. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/submit_task_tasks_post.py +0 -0
  114. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/task_resource_estimation_task_resource_estimation_post.py +0 -0
  115. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/trigger_workflow_execution_endpoint_workflows_trigger_post.py +0 -0
  116. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/whoami_whoami_get.py +0 -0
  117. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/client.py +0 -0
  118. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/errors.py +0 -0
  119. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/__init__.py +0 -0
  120. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_improvement_instruction.py +0 -0
  121. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_query_params.py +0 -0
  122. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_query_params_system_prompt_kind_type_0.py +0 -0
  123. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_task_args.py +0 -0
  124. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_task_args_processing_mode.py +0 -0
  125. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/allowed_suggestions.py +0 -0
  126. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/api_key_info.py +0 -0
  127. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_changed_payload.py +0 -0
  128. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record.py +0 -0
  129. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_analysis_type_0.py +0 -0
  130. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_metadata_type_0.py +0 -0
  131. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_trace_mapping_type_0.py +0 -0
  132. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_status.py +0 -0
  133. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/auto_cohort_conversation_message.py +0 -0
  134. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/aux_data.py +0 -0
  135. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/aux_data_source_bank.py +0 -0
  136. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/chat_completion_message_tool_call.py +0 -0
  137. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/chat_message_metadata.py +0 -0
  138. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/concatenate_query_params.py +0 -0
  139. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/concatenate_request.py +0 -0
  140. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/continue_reason.py +0 -0
  141. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/continue_task_request.py +0 -0
  142. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/controller_improvement_round.py +0 -0
  143. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/conversation_changed_payload.py +0 -0
  144. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_artifacts_request.py +0 -0
  145. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_artifacts_response.py +0 -0
  146. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_workflow_request.py +0 -0
  147. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_workflow_response.py +0 -0
  148. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_api_key_request.py +0 -0
  149. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_api_key_response.py +0 -0
  150. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_group_query_params.py +0 -0
  151. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_group_request.py +0 -0
  152. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_query_params.py +0 -0
  153. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_request.py +0 -0
  154. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_session_request.py +0 -0
  155. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_session_response.py +0 -0
  156. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_workflow_from_artifact_request.py +0 -0
  157. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_workflow_from_artifact_response.py +0 -0
  158. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/data_frame_method.py +0 -0
  159. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/date_cutoffs.py +0 -0
  160. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/dedupe_public_params.py +0 -0
  161. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/dedupe_request_params.py +0 -0
  162. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_merge_public_params.py +0 -0
  163. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_merge_request.py +0 -0
  164. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_rank_public_params.py +0 -0
  165. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_rank_request.py +0 -0
  166. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_screen_public_params.py +0 -0
  167. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_screen_request.py +0 -0
  168. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_expression.py +0 -0
  169. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_query_params.py +0 -0
  170. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_request.py +0 -0
  171. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/document_query_tool.py +0 -0
  172. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/drop_columns_query_params.py +0 -0
  173. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/drop_columns_request.py +0 -0
  174. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/event_type.py +0 -0
  175. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/execution_metadata.py +0 -0
  176. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/export_request.py +0 -0
  177. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/export_request_token_data.py +0 -0
  178. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/export_to_google_sheets_export_post_response_export_to_google_sheets_export_post.py +0 -0
  179. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/filter_query_params.py +0 -0
  180. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/filter_request.py +0 -0
  181. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/flatten_query_params.py +0 -0
  182. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/flatten_request.py +0 -0
  183. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/generate_feedback_request.py +0 -0
  184. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/group_by_query_params.py +0 -0
  185. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/group_by_request.py +0 -0
  186. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/healthz_healthz_get_response_healthz_healthz_get.py +0 -0
  187. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/http_validation_error.py +0 -0
  188. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/image_chat_content_part.py +0 -0
  189. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/image_chat_content_part_image_url.py +0 -0
  190. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/import_from_google_sheets_import_post_response_import_from_google_sheets_import_post.py +0 -0
  191. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/import_request.py +0 -0
  192. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/import_request_token_data.py +0 -0
  193. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/insufficient_balance_error.py +0 -0
  194. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/join_query_params.py +0 -0
  195. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/join_request.py +0 -0
  196. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/llm_enum.py +0 -0
  197. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/map_agent_request_params.py +0 -0
  198. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/map_multi_agent_request_params.py +0 -0
  199. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/message_created_payload.py +0 -0
  200. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_agent_effort_level.py +0 -0
  201. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_agent_query_params.py +0 -0
  202. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_modal_chat_message.py +0 -0
  203. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_modal_chat_message_role.py +0 -0
  204. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/preview_metadata.py +0 -0
  205. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/processing_mode.py +0 -0
  206. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/progress_status.py +0 -0
  207. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/queue_stats.py +0 -0
  208. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/reduce_agent_request_params.py +0 -0
  209. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/reduce_multi_agent_request_params.py +0 -0
  210. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/resource_estimation_response.py +0 -0
  211. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/response_schema_type.py +0 -0
  212. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/revoke_api_key_response.py +0 -0
  213. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/rollback_to_message_request.py +0 -0
  214. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/rollback_to_message_response.py +0 -0
  215. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/session_changed_payload.py +0 -0
  216. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message.py +0 -0
  217. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message_role.py +0 -0
  218. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message_with_tool_calls.py +0 -0
  219. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/source_database_entry.py +0 -0
  220. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record.py +0 -0
  221. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_analysis_type_0.py +0 -0
  222. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_metadata_type_0.py +0 -0
  223. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_trace_mapping_type_0.py +0 -0
  224. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/status_count.py +0 -0
  225. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/status_count_status.py +0 -0
  226. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_chat_task_body.py +0 -0
  227. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_chat_task_body_selected_task_type_type_0.py +0 -0
  228. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_task_body.py +0 -0
  229. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_changed_payload.py +0 -0
  230. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_effort.py +0 -0
  231. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_id_request.py +0 -0
  232. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_insert.py +0 -0
  233. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_insert_query_params.py +0 -0
  234. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_metadata.py +0 -0
  235. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_metadata_cols_to_rename_type_0.py +0 -0
  236. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_response.py +0 -0
  237. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_status.py +0 -0
  238. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_status_response.py +0 -0
  239. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_type.py +0 -0
  240. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/text_chat_content_part.py +0 -0
  241. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/tool_response_message.py +0 -0
  242. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/toolkit_constants.py +0 -0
  243. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trace_changed_payload.py +0 -0
  244. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trace_info.py +0 -0
  245. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request.py +0 -0
  246. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request_task_params.py +0 -0
  247. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request_task_params_additional_property.py +0 -0
  248. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_response.py +0 -0
  249. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/upload_csv_payload.py +0 -0
  250. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/upload_csv_query_params.py +0 -0
  251. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/usage_response.py +0 -0
  252. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/validation_error.py +0 -0
  253. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/whoami_whoami_get_response_whoami_whoami_get.py +0 -0
  254. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/workflow_leaf_node_input.py +0 -0
  255. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/py.typed +0 -0
  256. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/types.py +0 -0
  257. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/ops.py +0 -0
  258. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/result.py +0 -0
  259. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/session.py +0 -0
  260. {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/task.py +0 -0
  261. {everyrow-0.1.8 → everyrow-0.1.10}/tests/__init__.py +0 -0
  262. {everyrow-0.1.8 → everyrow-0.1.10}/tests/test_ops.py +0 -0
@@ -11,7 +11,7 @@
11
11
  "name": "everyrow",
12
12
  "source": "./",
13
13
  "description": "Claude Code plugin for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
14
- "version": "0.1.8"
14
+ "version": "0.1.10"
15
15
  }
16
16
  ]
17
17
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "everyrow",
3
3
  "description": "Claude Code plugin for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
4
- "version": "0.1.8",
4
+ "version": "0.1.10",
5
5
  "author": {
6
6
  "name": "FutureSearch"
7
7
  },
@@ -0,0 +1,56 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ name: Publish to PyPI
10
+ runs-on: ubuntu-latest
11
+ environment: pypi
12
+ permissions:
13
+ id-token: write
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v5
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Build packages
26
+ run: |
27
+ uv build
28
+ uv build --directory everyrow-mcp --out-dir $GITHUB_WORKSPACE/dist
29
+
30
+ - name: Publish to PyPI
31
+ uses: pypa/gh-action-pypi-publish@release/v1
32
+
33
+ build-mcpb:
34
+ name: Build MCPB Bundle
35
+ runs-on: ubuntu-latest
36
+ permissions:
37
+ contents: write
38
+ # MCPB bundles enable one-click installation in Claude Desktop.
39
+ # Note: Local MCP servers currently only work in Chat mode, not Cowork mode.
40
+ # See: https://github.com/anthropics/claude-code/issues/20377
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - name: Setup Node.js
45
+ uses: actions/setup-node@v4
46
+ with:
47
+ node-version: "20"
48
+
49
+ - name: Build MCPB bundle
50
+ working-directory: everyrow-mcp
51
+ run: npx -y @anthropic-ai/mcpb pack
52
+
53
+ - name: Upload MCPB to release
54
+ uses: softprops/action-gh-release@v2
55
+ with:
56
+ files: everyrow-mcp/everyrow-mcp.mcpb
@@ -217,3 +217,9 @@ __marimo__/
217
217
 
218
218
  .history/
219
219
  .python-version
220
+
221
+ # MCPB bundles
222
+ *.mcpb
223
+
224
+ # MCP registry tokens
225
+ .mcpregistry_*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: everyrow
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: An SDK for everyrow.io: agent ops at spreadsheet scale
5
5
  License-File: LICENSE.txt
6
6
  Requires-Python: >=3.12
@@ -0,0 +1,13 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.pyc
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ *.egg-info/
7
+ server/lib/
8
+ server/venv/
9
+ .mcpregistry_github_token
10
+ .mcpregistry_registry_token
11
+ tests/
12
+ dist/
13
+ .ruff_cache/
@@ -6,7 +6,15 @@ This server exposes everyrow's 5 core operations as MCP tools, allowing LLM appl
6
6
 
7
7
  **All tools operate on local CSV files.** Provide absolute file paths as input, and transformed results are written to new CSV files at your specified output path.
8
8
 
9
- ## Setup
9
+ ## Installation
10
+
11
+ ### Claude Desktop
12
+
13
+ Download the latest `.mcpb` bundle from the [GitHub Releases](https://github.com/futuresearch/everyrow-sdk/releases) page and double-click to install in Claude Desktop. You'll be prompted to enter your everyrow API key during setup.
14
+
15
+ > **Note:** The MCPB bundle works in Claude Desktop's **Chat** mode. Due to a [known limitation](https://github.com/anthropics/claude-code/issues/20377), local MCP servers are not currently exposed in Cowork mode.
16
+
17
+ ### Manual Config
10
18
 
11
19
  The server requires an everyrow API key. Get one at [everyrow.io/api-key](https://everyrow.io/api-key) ($20 free credit).
12
20
 
@@ -129,6 +137,10 @@ cd everyrow-mcp
129
137
  uv sync
130
138
  uv run pytest
131
139
  ```
140
+ For MCP [registry publishing](https://modelcontextprotocol.info/tools/registry/publishing/#package-deployment):
141
+
142
+ mcp-name: io.github.futuresearch/everyrow-mcp
143
+
132
144
 
133
145
  ## License
134
146
 
@@ -0,0 +1,70 @@
1
+ {
2
+ "manifest_version": "0.4",
3
+ "name": "everyrow-mcp",
4
+ "display_name": "Everyrow MCP Server",
5
+ "version": "0.1.10",
6
+ "description": "AI-powered dataframe ops: transform, dedupe, merge, rank, and screen with natural language",
7
+ "long_description": "MCP server for everyrow: agent ops at spreadsheet scale. This server exposes everyrow's 5 core operations as MCP tools, allowing LLM applications to screen, rank, dedupe, merge, and run agents on CSV files. All tools operate on local CSV files.",
8
+ "author": {
9
+ "name": "FutureSearch",
10
+ "url": "https://everyrow.io"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/futuresearch/everyrow-sdk.git"
15
+ },
16
+ "homepage": "https://everyrow.io",
17
+ "documentation": "https://github.com/futuresearch/everyrow-sdk/tree/main/everyrow-mcp",
18
+ "support": "https://github.com/futuresearch/everyrow-sdk/issues",
19
+ "server": {
20
+ "type": "uv",
21
+ "entry_point": "src/everyrow_mcp/server.py",
22
+ "mcp_config": {
23
+ "command": "uv",
24
+ "args": ["run", "${__dirname}/src/everyrow_mcp/server.py"],
25
+ "env": {
26
+ "EVERYROW_API_KEY": "${user_config.api_key}"
27
+ }
28
+ }
29
+ },
30
+ "tools": [
31
+ {
32
+ "name": "everyrow_screen",
33
+ "description": "Filter CSV rows based on criteria that require judgment"
34
+ },
35
+ {
36
+ "name": "everyrow_rank",
37
+ "description": "Score and sort CSV rows based on qualitative criteria"
38
+ },
39
+ {
40
+ "name": "everyrow_dedupe",
41
+ "description": "Remove duplicate rows using semantic equivalence"
42
+ },
43
+ {
44
+ "name": "everyrow_merge",
45
+ "description": "Join two CSV files using intelligent entity matching"
46
+ },
47
+ {
48
+ "name": "everyrow_agent",
49
+ "description": "Run web research agents on each row of a CSV"
50
+ }
51
+ ],
52
+ "user_config": {
53
+ "api_key": {
54
+ "type": "string",
55
+ "title": "Everyrow API Key",
56
+ "description": "Your API key from https://everyrow.io/api-key ($20 free credit)",
57
+ "sensitive": true,
58
+ "required": true
59
+ }
60
+ },
61
+ "compatibility": {
62
+ "platforms": ["darwin", "linux", "win32"],
63
+ "runtimes": {
64
+ "python": ">=3.12"
65
+ }
66
+ },
67
+ "keywords": ["everyrow", "dataframe", "csv", "ai", "data-processing", "dedupe", "merge", "rank", "screen"],
68
+ "license": "MIT",
69
+ "privacy_policies": ["https://futuresearch.ai/privacy/"]
70
+ }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "everyrow-mcp"
3
- version = "0.1.8"
3
+ version = "0.1.10"
4
4
  description = "MCP server for everyrow: agent ops at spreadsheet scale"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.futuresearch/everyrow-mcp",
4
+ "title": "Everyrow MCP Server",
5
+ "description": "AI-powered dataframe ops: transform, dedupe, merge, rank, and screen with natural language",
6
+ "repository": {
7
+ "url": "https://github.com/futuresearch/everyrow-sdk",
8
+ "source": "github",
9
+ "subfolder": "everyrow-mcp"
10
+ },
11
+ "websiteUrl": "https://github.com/futuresearch/everyrow-sdk/tree/main/everyrow-mcp",
12
+ "version": "0.1.10",
13
+ "packages": [
14
+ {
15
+ "registryType": "pypi",
16
+ "registryBaseUrl": "https://pypi.org",
17
+ "identifier": "everyrow-mcp",
18
+ "version": "0.1.10",
19
+ "runtimeHint": "uvx",
20
+ "transport": {
21
+ "type": "stdio"
22
+ },
23
+ "environmentVariables": [
24
+ {
25
+ "description": "API key for the everyrow service, found at https://everyrow.io/api-key",
26
+ "isRequired": true,
27
+ "isSecret": true,
28
+ "name": "EVERYROW_API_KEY"
29
+ }
30
+ ]
31
+ }
32
+ ]
33
+ }
@@ -1,6 +1,7 @@
1
1
  """MCP server for everyrow SDK operations."""
2
2
 
3
3
  import json
4
+ import logging
4
5
  import os
5
6
  import sys
6
7
  from contextlib import asynccontextmanager
@@ -30,7 +31,6 @@ async def lifespan(_server: FastMCP):
30
31
  response = await whoami(client=c)
31
32
  if response is None:
32
33
  raise RuntimeError("Failed to authenticate with everyrow API")
33
- print("everyrow-mcp: Authenticated successfully")
34
34
  except Exception as e:
35
35
  raise RuntimeError(f"everyrow-mcp startup failed: {e}") from e
36
36
 
@@ -539,6 +539,14 @@ def _schema_to_model(name: str, schema: dict[str, Any]) -> type[BaseModel]:
539
539
 
540
540
  def main():
541
541
  """Run the MCP server."""
542
+ # Configure logging to use stderr only (stdout is reserved for JSON-RPC)
543
+ logging.basicConfig(
544
+ level=logging.WARNING,
545
+ stream=sys.stderr,
546
+ format="%(levelname)s: %(message)s",
547
+ force=True,
548
+ )
549
+
542
550
  # Check for API key before starting
543
551
  if "EVERYROW_API_KEY" not in os.environ:
544
552
  print(
@@ -214,7 +214,7 @@ wheels = [
214
214
 
215
215
  [[package]]
216
216
  name = "everyrow-mcp"
217
- version = "0.1.0"
217
+ version = "0.1.9"
218
218
  source = { editable = "." }
219
219
  dependencies = [
220
220
  { name = "everyrow" },
@@ -972,8 +972,8 @@ name = "uvicorn"
972
972
  version = "0.40.0"
973
973
  source = { registry = "https://pypi.org/simple" }
974
974
  dependencies = [
975
- { name = "click" },
976
- { name = "h11" },
975
+ { name = "click", marker = "sys_platform != 'emscripten'" },
976
+ { name = "h11", marker = "sys_platform != 'emscripten'" },
977
977
  ]
978
978
  sdist = { url = "https://files.pythonhosted.org/packages/c3/d1/8f3c683c9561a4e6689dd3b1d345c815f10f86acd044ee1fb9a4dcd0b8c5/uvicorn-0.40.0.tar.gz", hash = "sha256:839676675e87e73694518b5574fd0f24c9d97b46bea16df7b8c05ea1a51071ea", size = 81761, upload-time = "2025-12-21T14:16:22.45Z" }
979
979
  wheels = [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "everyrow",
3
3
  "description": "Gemini extension for the everyrow SDK - AI-powered data processing utilities for transforming, deduping, merging, ranking, and screening dataframes",
4
- "version": "0.1.8",
4
+ "version": "0.1.10",
5
5
  "mcpServers": {
6
6
  "everyrow": {
7
7
  "command": "uvx",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "everyrow"
3
- version = "0.1.8"
3
+ version = "0.1.10"
4
4
  description = "An SDK for everyrow.io: agent ops at spreadsheet scale"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -33,6 +33,7 @@ dev = [
33
33
  "pytest-mock>=3.15.1",
34
34
  "basedpyright>=1.22.0",
35
35
  "ruff>=0.9.9",
36
+ "jsonschema>=4.0.0",
36
37
  ]
37
38
 
38
39
  [tool.basedpyright]
@@ -1,11 +1,13 @@
1
1
  import json
2
2
  import tomllib
3
3
 
4
+ import httpx
5
+ import jsonschema
4
6
  import pytest
5
7
 
6
8
 
7
9
  def test_version_consistency(pytestconfig: pytest.Config):
8
- """Check that version is consistent across pyproject.toml, plugin.json, gemini-extension.json, marketplace.json, and everyrow-mcp/pyproject.toml."""
10
+ """Check that version is consistent across pyproject.toml, plugin.json, gemini-extension.json, marketplace.json, everyrow-mcp/pyproject.toml, and everyrow-mcp/server.json."""
9
11
  root = pytestconfig.rootpath
10
12
 
11
13
  pyproject_path = root / "pyproject.toml"
@@ -33,6 +35,17 @@ def test_version_consistency(pytestconfig: pytest.Config):
33
35
  mcp_pyproject = tomllib.load(f)
34
36
  mcp_version = mcp_pyproject["project"]["version"]
35
37
 
38
+ server_json_path = root / "everyrow-mcp" / "server.json"
39
+ with open(server_json_path) as f:
40
+ server_json = json.load(f)
41
+ server_json_version = server_json["version"]
42
+ server_json_package_version = server_json["packages"][0]["version"]
43
+
44
+ manifest_json_path = root / "everyrow-mcp" / "manifest.json"
45
+ with open(manifest_json_path) as f:
46
+ manifest_json = json.load(f)
47
+ manifest_version = manifest_json["version"]
48
+
36
49
  assert pyproject_version == plugin_version, (
37
50
  f"pyproject.toml version ({pyproject_version}) != plugin.json version ({plugin_version})"
38
51
  )
@@ -45,3 +58,30 @@ def test_version_consistency(pytestconfig: pytest.Config):
45
58
  assert pyproject_version == mcp_version, (
46
59
  f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/pyproject.toml version ({mcp_version})"
47
60
  )
61
+ assert pyproject_version == server_json_version, (
62
+ f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/server.json version ({server_json_version})"
63
+ )
64
+ assert pyproject_version == server_json_package_version, (
65
+ f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/server.json packages[0].version ({server_json_package_version})"
66
+ )
67
+ assert pyproject_version == manifest_version, (
68
+ f"pyproject.toml version ({pyproject_version}) != everyrow-mcp/manifest.json version ({manifest_version})"
69
+ )
70
+
71
+
72
+ def test_server_json_schema(pytestconfig: pytest.Config):
73
+ """Validate everyrow-mcp/server.json against its JSON schema."""
74
+ root = pytestconfig.rootpath
75
+
76
+ server_json_path = root / "everyrow-mcp" / "server.json"
77
+ with open(server_json_path) as f:
78
+ server_json = json.load(f)
79
+
80
+ schema_url = server_json.get("$schema")
81
+ assert schema_url, "server.json must have a $schema field"
82
+
83
+ response = httpx.get(schema_url)
84
+ response.raise_for_status()
85
+ schema = response.json()
86
+
87
+ jsonschema.validate(instance=server_json, schema=schema)
@@ -230,7 +230,7 @@ wheels = [
230
230
 
231
231
  [[package]]
232
232
  name = "everyrow"
233
- version = "0.1.5"
233
+ version = "0.1.10"
234
234
  source = { editable = "." }
235
235
  dependencies = [
236
236
  { name = "attrs" },
@@ -249,6 +249,7 @@ case-studies = [
249
249
  ]
250
250
  dev = [
251
251
  { name = "basedpyright" },
252
+ { name = "jsonschema" },
252
253
  { name = "openapi-python-client" },
253
254
  { name = "pytest" },
254
255
  { name = "pytest-asyncio" },
@@ -274,6 +275,7 @@ case-studies = [
274
275
  ]
275
276
  dev = [
276
277
  { name = "basedpyright", specifier = ">=1.22.0" },
278
+ { name = "jsonschema", specifier = ">=4.0.0" },
277
279
  { name = "openapi-python-client", specifier = ">=0.28.1" },
278
280
  { name = "pytest", specifier = ">=9.0.2" },
279
281
  { name = "pytest-asyncio", specifier = ">=1.3.0" },
@@ -1,31 +0,0 @@
1
- name: Publish to PyPI
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- publish:
9
- name: Publish to PyPI
10
- runs-on: ubuntu-latest
11
- environment: pypi
12
- permissions:
13
- id-token: write
14
- steps:
15
- - uses: actions/checkout@v4
16
-
17
- - name: Install uv
18
- uses: astral-sh/setup-uv@v5
19
-
20
- - name: Set up Python
21
- uses: actions/setup-python@v5
22
- with:
23
- python-version: "3.12"
24
-
25
- - name: Build packages
26
- run: |
27
- uv build
28
- uv build --directory everyrow-mcp --out-dir $GITHUB_WORKSPACE/dist
29
-
30
- - name: Publish to PyPI
31
- uses: pypa/gh-action-pypi-publish@release/v1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes