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.
- {everyrow-0.1.8 → everyrow-0.1.10}/.claude-plugin/marketplace.json +1 -1
- {everyrow-0.1.8 → everyrow-0.1.10}/.claude-plugin/plugin.json +1 -1
- everyrow-0.1.10/.github/workflows/publish.yaml +56 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/.gitignore +6 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/PKG-INFO +1 -1
- everyrow-0.1.10/everyrow-mcp/.mcpbignore +13 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/README.md +13 -1
- everyrow-0.1.10/everyrow-mcp/manifest.json +70 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/pyproject.toml +1 -1
- everyrow-0.1.10/everyrow-mcp/server.json +33 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/server.py +9 -1
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/uv.lock +3 -3
- {everyrow-0.1.8 → everyrow-0.1.10}/gemini-extension.json +1 -1
- {everyrow-0.1.8 → everyrow-0.1.10}/pyproject.toml +2 -1
- {everyrow-0.1.8 → everyrow-0.1.10}/tests/test_version.py +41 -1
- {everyrow-0.1.8 → everyrow-0.1.10}/uv.lock +3 -1
- everyrow-0.1.8/.github/workflows/publish.yaml +0 -31
- {everyrow-0.1.8 → everyrow-0.1.10}/.env.example +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/.gitattributes +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/.github/workflows/ci.yaml +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/.github/workflows/skill-version-check.yaml +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/LICENSE.txt +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/README.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/add-column-web-lookup.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/basic-usage/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/dedupe-crm-company-records/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/dedupe-researchers-across-career-changes/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/match-software-vendors-to-requirements/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-contacts-with-company-data/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-overlapping-contact-lists/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/multi-stage-lead-qualification/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/research-and-rank-permit-times/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-from-fragmented-data/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-without-crm-history/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-job-postings-by-criteria/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-stocks-by-investment-thesis/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-stocks-by-margin-sensitivity/notebook.ipynb +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/classify-dataframe-rows-llm.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/S&P 500 Companies.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/b2b_companies.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/case_01_crm_data.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/companies.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/company_info.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/contacts_list_a.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/contacts_list_b.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_contacts.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_funds.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/crm_ready_contacts.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/hn_jobs.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/investment_firms.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/investment_funds.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/job_postings.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/oil_price_margin_screen_results.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/qualified_leads.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/researchers.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/saas_products.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/texas_cities.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/thematic_screen_results.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/data/valuations.csv +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/deduplicate-training-data-ml.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/filter-dataframe-with-llm.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/fuzzy-join-without-keys.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/rank-by-external-metric.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/AGENT.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/DEDUPE.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/MERGE.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/RANK.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/reference/SCREEN.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/docs/resolve-entities-python.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/src/everyrow_mcp/utils.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/conftest.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_integration.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_server.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/everyrow-mcp/tests/test_utils.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/generate_openapi.sh +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/images/future-search-logo-128.webp +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/lefthook.yml +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/openapi-python-client.yaml +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/skills/everyrow-sdk/SKILL.md +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/api_utils.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/citations.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/constants.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/continue_task_endpoint_tasks_continue_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/copy_artifacts_artifacts_copy_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/copy_workflow_endpoint_workflows_copy_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_api_key_endpoint_api_keys_create_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_session_endpoint_sessions_create_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/create_workflow_from_artifact_workflows_from_artifact_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/export_to_google_sheets_export_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/generate_feedback_endpoint_tasks_generate_feedback_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_artifacts_artifacts_get.py +0 -0
- {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
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_job_progress_for_task_jobs_progress_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_metrics_metrics_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_queues_stats_jobs_queues_get.py +0 -0
- {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
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/get_user_usage_usage_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/healthz_healthz_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/import_from_google_sheets_import_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/interrupt_chat_task_tasks_chat_interrupt_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/list_api_keys_endpoint_api_keys_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/re_execute_task_endpoint_tasks_re_execute_post.py +0 -0
- {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
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/revoke_jobs_for_task_jobs_revoke_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/rollback_to_message_endpoint_tasks_chat_rollback_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/submit_chat_task_tasks_chat_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/submit_task_tasks_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/task_resource_estimation_task_resource_estimation_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/trigger_workflow_execution_endpoint_workflows_trigger_post.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/api/default/whoami_whoami_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/client.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/errors.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/__init__.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_improvement_instruction.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_query_params_system_prompt_kind_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_task_args.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/agent_task_args_processing_mode.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/allowed_suggestions.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/api_key_info.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_changed_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_analysis_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_metadata_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_group_record_trace_mapping_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/artifact_status.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/auto_cohort_conversation_message.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/aux_data.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/aux_data_source_bank.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/chat_completion_message_tool_call.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/chat_message_metadata.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/concatenate_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/concatenate_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/continue_reason.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/continue_task_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/controller_improvement_round.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/conversation_changed_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_artifacts_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_artifacts_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_workflow_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/copy_workflow_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_api_key_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_api_key_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_group_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_group_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_session_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_session_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_workflow_from_artifact_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/create_workflow_from_artifact_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/data_frame_method.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/date_cutoffs.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/dedupe_public_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/dedupe_request_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_merge_public_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_merge_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_rank_public_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_rank_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_screen_public_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/deep_screen_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_expression.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/derive_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/document_query_tool.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/drop_columns_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/drop_columns_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/event_type.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/execution_metadata.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/export_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/export_request_token_data.py +0 -0
- {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
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/filter_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/filter_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/flatten_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/flatten_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/generate_feedback_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/group_by_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/group_by_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/healthz_healthz_get_response_healthz_healthz_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/http_validation_error.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/image_chat_content_part.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/image_chat_content_part_image_url.py +0 -0
- {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
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/import_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/import_request_token_data.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/insufficient_balance_error.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/join_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/join_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/llm_enum.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/map_agent_request_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/map_multi_agent_request_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/message_created_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_agent_effort_level.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_agent_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_modal_chat_message.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/multi_modal_chat_message_role.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/preview_metadata.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/processing_mode.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/progress_status.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/queue_stats.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/reduce_agent_request_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/reduce_multi_agent_request_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/resource_estimation_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/response_schema_type.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/revoke_api_key_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/rollback_to_message_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/rollback_to_message_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/session_changed_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message_role.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/simple_chat_message_with_tool_calls.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/source_database_entry.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_analysis_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_metadata_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/standalone_artifact_record_trace_mapping_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/status_count.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/status_count_status.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_chat_task_body.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_chat_task_body_selected_task_type_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/submit_task_body.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_changed_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_effort.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_id_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_insert.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_insert_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_metadata.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_metadata_cols_to_rename_type_0.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_status.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_status_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/task_type.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/text_chat_content_part.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/tool_response_message.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/toolkit_constants.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trace_changed_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trace_info.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request_task_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_request_task_params_additional_property.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/trigger_workflow_execution_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/upload_csv_payload.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/upload_csv_query_params.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/usage_response.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/validation_error.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/whoami_whoami_get_response_whoami_whoami_get.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/models/workflow_leaf_node_input.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/py.typed +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/generated/types.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/ops.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/result.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/session.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/src/everyrow/task.py +0 -0
- {everyrow-0.1.8 → everyrow-0.1.10}/tests/__init__.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
@@ -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
|
-
##
|
|
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
|
+
}
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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,
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/dedupe-crm-company-records/notebook.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-contacts-with-company-data/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/merge-overlapping-contact-lists/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/multi-stage-lead-qualification/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/research-and-rank-permit-times/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-from-fragmented-data/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/score-leads-without-crm-history/notebook.ipynb
RENAMED
|
File without changes
|
{everyrow-0.1.8 → everyrow-0.1.10}/docs/case_studies/screen-job-postings-by-criteria/notebook.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|