본관은 안동(安東). 호는 동농(東農). 예조판서 김응균(金應均)의 아들이다.
규장각참서관(奎章閣參書官)으로 관직 생활을 시작하였다. 1880년 사헌부감찰(司憲府監察), 1881년 장례원주부(掌禮院主簿)가 되었다. 그 뒤 인천항 통상사무아문주사(通商事務衙門主事) · 부수찬(副修撰) · 주차일본공사관참찬관(駐箚日本公使館參贊官)과 장령(掌令) · 사복시정(司僕寺正) · 동부승지 등을 역임하였다.
1886년 정시 문과 병과에 급제하였고 이후 홍문관 수찬(修撰)이 되었다. 1887년 규장각검서관(奎章閣檢書官)으로 관직생활을 시작하였다. 1887년부터 판사대신 주일공사(辦事大臣 駐日公使)로 4년간 동경(東京)에 주재하였으며, 1891년부터 안동대도호부부사를 지냈다. 1894년에는 군국기무처회의원(軍國機務處會議員)이 되어 내정개혁에 참여했고, 병조참의 · 외무독판서리(外務督辦署理) · 전우국총판(電郵局總辦) · 공조판서 등을 역임하였다. 1895년 농상공부대신, 1896년 중추원1등의관을 지냈다.
갑오개혁이 실패한 뒤에는 1896년 7월에 조직된 독립협회의 위원으로 선임되었으며, 이때 독립문 현판석의 ‘독립문’ 글씨를 한자와 한글로 썼다. 1897년 신구법(新舊法)을 절충하기 위해 설치한 교전소(校典所)의 지사원(知事員)과 황해도관찰사를 역임하였다. 1900년 중추원의장, 1902년 궁내부특진관(宮內部特進官)을 지냈다. 1905년 을사조약 체결을 민영환 등과 함께 격렬히 반대했으나 좌절되자 1906년 충청도관찰사로 스스로 좌천하였다. 1907년 규장각제학을 역임하였고, 1908년 7월에는 대한협회의 제2대 회장으로 선임되어 친일단체인 일진회를 성토하였다.
1910년 일제가 우리나라를 강점한 뒤 수여한 남작(男爵)의 작위를 받았다가 그 뒤 즉시 반납하고, 비밀결사인 조선민족대동단(朝鮮民族大同團)의 총재 및 고문으로 추대되어 상해로 건너가 독립운동을 하였다. 1920년 3월에는 대동단 총재의 명의로 포고문 · 통고문을 배포했으며, 대동단의 박용만(朴容萬) · 나창헌(羅昌憲) · 손영직(孫永稷) · 고광원(高光元) 등과 공동명의로 갹금권고문(醵金勸告文)을 발표하였다. 그 뒤 단원들이 붙잡혀 대동단이 해체된 뒤에는 대한민국 임시정부의 고문으로 활약하였다. 한학과 서예로도 유명하였다.